Dropdownlist客户端需要验证(没有型号)

Kar*_*ran 3 asp.net-mvc asp.net-mvc-4

查看:

@Html.DropDownList("CategoryItems", null, new { @class = "ddlcs" })
@Html.ValidationMessage("CategoryItems")
Run Code Online (Sandbox Code Playgroud)

控制器:

var cat = from s in db.CategoryDbSet
          where s.IsActive == true
          orderby s.CatName
          select new { s.CatID, s.CatName };

var catListItems = cat.ToList()
                      .Select(c => new SelectListItem   
                             {
                                 Text = c.CatName,
                                 Value = c.CatID.ToString()
                             })
                       .ToList();

catListItems.Insert(0, new SelectListItem 
                           {
                               Text = "[--Select the category--]", 
                               Value = "" 
                           });

ViewBag.CategoryItems = catListItems;
Run Code Online (Sandbox Code Playgroud)

当有人在保存操作期间选择"选择类别"选项时,我希望对下拉列表强制执行所需的验证.我是MVC框架的新手,我不确定我在哪里犯这个错误?此下拉列表与模型无关.

请提出解决方案.

Dar*_*rov 5

此下拉列表与模型无关.

那是错误的.ASP.NET MVC中的验证通过使用相应属性修饰视图模型属性来工作.例如,如果要使此下拉列表成为必需,则可以使用该[Required]属性修饰视图模型上的相应属性.

因此,为现有视图模型添加必要的属性:

public class MyViewModel
{
    [Required]
    public int? SelectedCategoryId { get; set; }

    public IEnumerable<SelectListItem> Categories { get; set; }

    ... some other properties that your view might need
}
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器操作中填充此视图模型:

var model = new MyViewModel();
model.Categories = cat
    .ToList()
    .Select(c => new SelectListItem   
    {
        Text = c.CatName,
        Value = c.CatID.ToString()
    }).ToList();

return View(model);
Run Code Online (Sandbox Code Playgroud)

并在您的视图中使用强类型版本的帮助程序:

@Html.DropDownListFor(
    x => x.SelectedCategoryId,
    Model.Categories, 
    "[--Select the category--]", 
    new { @class = "ddlcs" }
)
@Html.ValidationMessageFor(x => x.SelectedCategoryId)
Run Code Online (Sandbox Code Playgroud)

  • 您不应该在视图中使用EF模型.这就是视图模型的用途.您的控制器可以在2之间进行映射. (2认同)