具有鍵“XXX”的ViewData項的類型為“System.Int32”我有以下視圖模型public class ProjectVM{
....
[Display(Name = "Category")]
[Required(ErrorMessage = "Please select a category")]
public int CategoryID { get; set; }
public IEnumerable<SelectListItem> CategoryList { get; set; }
....}和以下控制器方法創建一個新項目并分配一個 Categorypublic ActionResult Create(){
ProjectVM model = new ProjectVM
{
CategoryList = new SelectList(db.Categories, "ID", "Name")
}
return View(model);}public ActionResult Create(ProjectVM model){
if (!ModelState.IsValid)
{
return View(model);
}
// Save and redirect}并在視圖中@model ProjectVM....@using (Html.BeginForm()){
....
@Html.LabelFor(m => m.CategoryID)
@Html.DropDownListFor(m => m.CategoryID, Model.CategoryList, "-Please select-")
@Html.ValidationMessageFor(m => m.CategoryID)
....
<input type="submit" value="Create" />}視圖顯示正確但在提交表單時,我收到以下錯誤消息InvalidOperationException:具有鍵“CategoryID”的ViewData項的類型為“System.Int32”,但必須是“IEnumerable <SelectListItem>”類型。使用該@Html.DropDownList()方法會發生相同的錯誤,如果我使用ViewBag或傳遞SelectList ViewData。
4 回答
MMTTMM
TA貢獻1869條經驗 獲得超4個贊
根據斯蒂芬的回答,這可能很有用:
@Html.DropDownListFor(m => m.CategoryID, Model.CategoryList ?? new List<SelectListItem>(), "-Please select-")
或在ProjectVM中:
public class ProjectVM{
public ProjectVM()
{
CategoryList = new List<SelectListItem>();
}
...}
墨色風雨
TA貢獻1853條經驗 獲得超6個贊
最可能導致某種錯誤重定向到您的頁面,而您又沒有再次初始化模型的下拉列表。
確保在模型的構造函數中或每次將所述模型發送到頁面之前初始化下拉列表。
否則,您需要通過視圖包或隱藏值助手維護下拉列表的狀態。
慕田峪7331174
TA貢獻1828條經驗 獲得超13個贊
我有同樣的問題,當我試圖發布表單時,我得到了一個無效的ModelState。對我來說,這是因為將CategoryId設置為int,當我將其更改為字符串時,ModelState有效且Create方法按預期工作。
- 4 回答
- 0 關注
- 1360 瀏覽
添加回答
舉報
0/150
提交
取消
