2013-10-25 74 views
0

我正在嘗試使用MVC4提交表單,並且似乎無法弄清爲什麼在提交後出現錯誤。我粘貼了以下所有相關代碼以及我所看到的錯誤。MVC中dropdownlistfor的問題

錯誤:

The ViewData item that has the key 'Group' is of type 'System.String' but must be of type 'IEnumerable<SelectListItem>'.

控制器:

[HttpGet] 
public ActionResult CreateRole() 
{ 
var RM = new myModel(); 
RM.Groups = RM.InitializeGroupList(); 
return View(RM); 
} 

[HttpPost] 
public ActionResult Myfunction(myModel model) 

if (ModelState.IsValid) 
{ 
//Execute Update 
} 

型號:

[Required] 
[Display(Name = "Group")] 
public string Group { get; set; } 


public IEnumerable<SelectListItem> Groups; 

public IEnumerable<SelectListItem> InitializeGroupList() 
    { 
     List<SelectListItem> topOfList = new List<SelectListItem> 
     { 
      new SelectListItem { Value = string.Empty, Text = "Category" }, 
      new SelectListItem { Value = "Administrator", Text = "Administrator" }, 
      new SelectListItem { Value = "Partner", Text = "Partner" }, 
      new SelectListItem { Value = "Internal", Text = "Internal" } 
     }; 
     //IEnumerable<SelectListItem> list = db.GetRoleList(topOfList); 
     IEnumerable<SelectListItem> list = topOfList; 
     return new SelectList(list, "Value", "Text"); 
    } 

[Required] 
[Display(Name = "Group")] 
public string Group { get; set; } 


public IEnumerable<SelectListItem> Groups; 

查看:

@Html.DropDownListFor(model => model.Group, Model.Groups) 
+0

不確定它是否重要,但您可能希望使用「組」作爲屬性替代字段。即添加一個getter和setter:'public IEnumerable Groups {get;組; }' –

回答

1

那是因爲你的HttpPost控制器動作,您忘了填充Groups屬性上的視圖模型的情況下,當你呈現了同樣的觀點:

​​

不要忘了將DropDownList僅發送所選值當你提交表格時。如果您打算重新顯示相同的視圖,其他值取決於您在GET操作中以相同的方式檢索。

+0

我以爲如果你不填充選擇列表,MVC會拋出'NullReferenceException'。這個錯誤看起來不同。 –

+0

@HenkMollema,不,它會拋出這個異常。這就是爲什麼很多人被它困惑並陷入陷阱。 –