2013-04-11 46 views
0

鑑於我已經和我無法驗證下面MVC編碼我們如何可以驗證下方下拉列表中MVC3

 @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; 
      } 
     } 

回答

0

儘量避免使用ViewBag/ViewData用於將數據發送到您的視圖。根據驗證需要,使用強類型視圖& ViewModels以及數據註釋。

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

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

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

這裏我有Required屬性裝飾NameSelectedPriority性能。這意味着,用戶需要輸入這些信息,否則,它會彈出表單提交驗證消息。

在您的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中的客戶端驗證。