2013-06-24 96 views
0

不知道我是否正確填充了我的下拉列表,但我在驗證我的下拉列表中的值時遇到了問題。當一個值被選中時,它仍然顯示錯誤'The value x is invalid'。該類型是int?因爲我知道int不適用於驗證器。MVC3無法驗證下拉列表

查看型號代碼:

[Display(Name = "Category")] 
    [Required(ErrorMessage = "Category is required.")] 
    public AWS.DTO.Lookup Category { get; set; } 
    public IEnumerable<AWS.DTO.Lookup> Categories { get; set; } 

控制器代碼:

[PageOptions(Title = "Create FMR")] 
    public ActionResult Create() 
    { 
     var model = new FMRRequestViewModel(); 

     model.Categories = new AWS.BL.Lookup().GetFMRCategories(); 

     return View(model); 
    } 

查找類型:

public class Lookup 
{ 
    public int? ID { get; set; } 
    public string Description { get; set; } 
} 

查看代碼:

@Html.DropDownListFor(m => m.Category, new SelectList(Model.Categories, "ID", "Description", -1), "-- Please Select -- ") 

在此先感謝您的幫助。

+0

你爲什麼要讓'Lookup'類的'ID'爲空? – SOfanatic

+0

因爲我讀過驗證器不能使用非空類型,但正如你所看到的,我把它弄錯了。 – Wilky

回答

2

DropDown不會那樣工作。下拉菜單隻能發送ID,而不能發送文本。您將整個Category對象傳遞給DropDownListFor,它不會理解。

@Html.DropDownListFor(m => m.Category.ID, new SelectList(Model.Categories, "ID", "Description", -1), "-- Please Select -- ") 
1

一旦選定,它就不會綁定到Lookup模型。 MVC不像ASP那樣工作,你會收到一個對象(ASP會「綁定」一個可枚舉的對象,當選中時,整個對象被返回 - 這不是mvc中的情況,只有鍵是返回(或任何屬性被映射爲下拉的值))。

相反,您必須接受Int32,然後在您的操作中檢索匹配的Lookup。因此,簡而言之:

  1. 改變你的ViewModel所以CategoryInt32/int(而不是一個Lookup對象)。
  2. 在接收動作地圖Lookup基於什麼Category有填充值。
+0

.....和這個! – Wilky