我们如何在mvc3中验证以下下拉列表

时间:2013-04-11 14:28:39

标签: c# jquery asp.net-mvc asp.net-mvc-3

在视图中我有,我无法验证以下mvc代码

       @Html.DropDownList("PriorityId", (IEnumerable<SelectListItem>)@ViewBag.Priority, "--Please Select One--", new { @id = "ddlPriority", @class = "dropdown" })

在控制器中我有

       private void PriorityDropdownList()
       {
           IEnumerable<SelectListItem> priorityDropdownlist =_PriorityObj.PriorityDropdownlistGet();
           if (priorityDropdownlist != null)
           {
               ViewBag.Priority = priorityDropdownlist;
           }
       }

1 个答案:

答案 0 :(得分:0)

尽量避免使用 ViewBag / ViewData 将数据发送到您的视图。使用强类型视图&amp; ViewModels包含验证所需的数据注释。

public class CreateIssueVM
{
  [Required]
  public string Name { set;get;}

  public List<SelectListItem> Priorities { get; set; }

  [Required]
  public int SelectedPriority { set;get;}
}

在这里,我使用Name属性修饰了SelectedPriorityRequired属性。这意味着,用户需要输入这些,否则,它将显示表单提交的验证消息。

GET操作中,设置集合属性值并将其发送到视图。

public ActionResult Create()
{
  var vm=new CreateIssueVM();
  vm.Priorities =GetPriorities();
  return View(vm);
}

假设GetPriorities方法返回优先级SelectListItem的集合。

public List<SelectListItem> GetPriorities()
{
  List<SelectListItem> prioList=new List<SelectListItem>();
  prioList.Add(new SelectListItem { Text = "High", Value = "1" });
  prioList.Add(new SelectListItem { Text = "Low", Value = "2" });
  // to do :read from db and add to list instead of hardcoding
  return prioList;
}

现在在我们看来,强烈输入CreateIssueVM

@model CreateIssueVM
@using(Html.BeginForm())
{
  @Html.DropDownListFor(x=>x.SelectedPriority,
                     new SelectList(Model.Priorities ,"Value","Text"),"select")
  @Html.ValidationMessageFor(x=>x.SelectedPriority)
  <input type="submit" />
}

提交表单时,您可以通过查看ModelState.IsValid属性来检查表单是否有效。

[HttpPost]
public ActionResult Create(CreateIssueVM model)
{
  if(ModelState.IsValid)
  {
    // save and redirect
  }
  vm.Priorities =GetPriorities();
  return View(vm);
} 

如果您还想实现客户端验证,您可以在视图中包含相关的jquery不显眼验证脚本,并在web.config中启用客户端验证。