在下拉列表中选择的MVC4验证项目

马特

我有一个要创建的页面objects,在这个页面中有一个DropDownList如果我从列表中选择一个项目,则我的页面将正确保存,但是,如果我不选择一个项目,则它似乎在回发时失败,因为对象将为null。

我想要的是尝试验证用户是否已选择一个项目(默认为“请选择...”)。

我有可以检查并在控制器中查看该项目是否为null的代码,但是那又如何显示一条消息?保留所有其他详细信息(如果存在)。

public ActionResult Create(int objectId = 0)
{
var resultModel = new MyObjectModel();
resultModel.AllObjects = new SelectList(_system.GetAllObjects(objectId)); 
// GetAllObjects juts returns a list of items for the drop down.
return View(resultModel);
}

[HttpPost]
public ActionResult Create(int? objectId, FormCollection collection)
{
try
{
int objectIdNotNull = 0;
if (objectId > 1)
{
objectIdNotNull = (int) objectId;
}
string objectName = collection["Name"];
int objectTypeSelectedResult = 1;
int.TryParse(collection["dllList"], out objectTypeSelectedResult);
if (!Convert.ToBoolean(objectTypeSelectedResult))
{
// So here I have discovered nothing has been selected, and I want to alert the user
    return RedirectToAction("Create",
        new {ObjectId = objectIdNotNull, error = "Please select an Object Type"});
}
....

return RedirectToAction(...)

}
catch
{
return View();
}
}

上面的代码仅进入“创建”页面,但未显示错误。在我的创建视图中,我假设以下行将显示任何错误:@ViewData [“ error”]

附加代码型号:

using System.Collections.Generic;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;

namespace MyNameSpace
{
public class MyObjectModel
{
[Required(ErrorMessage = "Please select an Object Type")]
public SelectList AllObjects { get; set; }  // I populate the drop down with this list
}
}

看法:

@model MyNameSpace.MyObjectModel

@{
ViewBag.Title = "Create";
}

<h2>Create </h2>

<p class="text-error">@ViewData["Message"]</p>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"> </script>

@using (Html.BeginForm())
{ 
@Html.ValidationSummary(true)
<fieldset>       
<div class="editor-label">
@Html.LabelFor(model => model.MyObject.Name)
</div>
<div class="editor-field">
@Html.TextBoxFor(model=>model.MyObjectType.Name, new {style="width: 750px"})
@Html.ValidationMessageFor(model => model.MyObjectType.Name)
</div>

<div>
<label for="ddlList">Choose Type</label>
@if (@Model != null)
{  
@Html.DropDownList("ddlList", Model.AllObjects, "Please Select...")
@Html.ValidationMessageFor(model => model.AllObjects, "An object must be selected", new { @class = "redText"})
}
</div>

<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
蜂蜜

您正在验证SelectList哪个是错误的

[Required(ErrorMessage =“必须选择一个对象”)]
public SelectList AllObjects {get; 放; }

您的模型应该是

[Required(ErrorMessage = "Please select an Object Type")]
public int ObjectId { get; set; }
public string ObjectName { get; set; }

您的控制器(不需要表单收集,这就是MVC的全部内容)

public ActionResult Create(int Id = 0)
{
    MyObjectModel resultModel = new MyObjectModel();

    var ObjectResultList = _system.GetAllObjects(Id);
    var ObjectSelectList = new SelectList(ObjectResultList, "id", "Name");
    ViewBag.ObjectList = ObjectSelectList;

    return View(resultModel);
}

您的Post控制器:

[HttpPost]
public ActionResult Create(MyObjectModel o)
{
    try
    {
            if (ModelState.IsValid)
            {
                            //It's valid , your code here!

                return RedirectToAction("ObjectCreated", new { id = o.objectId });
            }
            else
            {
                var errors = ModelState
                    .Where(x => x.Value.Errors.Count > 0)
                    .Select(x => new { x.Key, x.Value.Errors })
                    .ToArray();
            }
        }
    }
    catch (Exception ex)
    {
        Response.Write(ex.InnerException.Message);
    }
    //If we get here it means the model is not valid, We're in trouble
    //then redisplay the view repopulate the dropdown
    var ObjectResultList = _system.GetAllObjects(objectId);
    var ObjectSelectList = new SelectList(ObjectResultList, "id", "value");
    ViewBag.ObjectList = ObjectSelectList;


    return View(o);
}

您的视图应为强类型

<div class="editor-label">
    @Html.LabelFor(model => model.ObjectId)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.ObjectId,
       (IEnumerable<SelectListItem>)ViewBag.ObjectList, "-- Select One Object --")
    @Html.ValidationMessageFor(model => model.ObjectId)
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 Selenium 在下拉列表中选择项目?

在下拉列表中选择后的计算

丰富:在下拉菜单中选择跳转到列表中当前选择的项目

MVC4下拉列表选择的值

angular 2+ 强制在下拉列表中选择第一个项目

为什么我无法在下拉列表中选择项目?

如何在下拉列表中选择一个项目?

我无法在下拉列表Web VBA中选择多个项目

单击编辑按钮时,在下拉列表中选择相应的项目

MVC视图不要在下拉列表中选择空值

在下拉列表中选择标记为列表的元素

使用MVC下拉列表如何编辑表单并在下拉列表中显示数据,并在下拉列表中显示先前选择的项目?

angular 6 ng-选择如何使用模板表达式设置在下拉列表中选择的项目

显示在下拉列表中选择的内容:Bootstrap

如何使用在下拉列表中选择

在下拉列表中选择的操纵up返回值

在下拉列表中选择值显示隐藏的输入字段

在下拉列表中选择值后,Div不更新

计算使用JavaScript在下拉列表中选择的变量数

在下拉列表中选择值后没有重建

MVC项目中的ASP.NET MVC4数据上下文类下拉列表

如何通过在下拉列表中选择并在表格中显示来获取所有项目名称

MVC选择列表在下拉列表中不显示selecteditem

验证MVC4中的下拉列表,未生成数据值属性

当用户从下拉列表中选择一个项目时,则必须在mvc 4中为该用户删除该项目

MVC4:从下拉列表选择中动态更改路由值

如何根据下拉列表在 MVC 中选择的表上显示特定项目?

当用户在下拉列表中选择值时,从数据库中选择ID

在下拉列表(MVC)中显示复选框项目