我正在使用ViewModel創建操作,該操作由一個類型爲Device
的實體和兩個IEnumerable<SelectListItem>
組成,用於在創建新項目的同時填充2個下拉列表。ViewModel的部分創建視圖的數據類型不匹配
public class DeviceEditViewModel
{
public Device dev { get; set; }
public int SelectedManufactor { set; get; }
public IEnumerable<SelectListItem> ManufactorListItems { get; set; }
public int SelectedCategory { set; get; }
public IEnumerable<SelectListItem> CategoriesListItems { get; set; }
}
public ActionResult Create()
{
var vm = new DeviceEditViewModel
{
CategoriesListItems = repo.GetCategories().Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
}),
ManufactorListItems = repo.GetManufactors().Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
})
};
return View(vm);
}
本身沒有錯,因爲我可以創建,讀取和更新一切都很好。 現在我想更新我的索引視圖來保存部分創建視圖。在頁面的右側,應該有與獨立視圖中相同的創建表單。
<div class="col-lg-4">
@{ Html.RenderPartial("_Create", new DeviceEditViewModel()); }
</div>
現在一旦運行這個,我收到以下錯誤(意譯):
"SelectedManufactor" is of type "System.Int32", but requires the type "IEnumerable<SelectListItem>".
索引視圖渲染和希望呼叫的設備控制器創建方法。創建方法創建一個新的DeviceEditViewModel
並填充兩個IEnumerable<SelectListItem>
。爲什麼在部分視圖中失敗,但在常規視圖中失敗 - 我該如何解決這個問題?
UPDATE Lins的答案是不完全正確的,但給我帶來了正確的軌道上 - 這在我的世界算作一個給予好評和接受的答案。
我所做的是創建了一個DeviceIndexViewModel
,其中包含創建/編輯設備所需的EditViewModel。
public class DeviceIndexViewModel
{
public IEnumerable<Device> Devices { get; set; }
public DeviceEditViewModel DeviceEditViewModel { get; set; }
}
現在index動作需要進行相應的更新:
public ActionResult Index(string searchString)
{
DeviceIndexViewModel vm = new DeviceIndexViewModel();
// ...
// omitted
// ...
vm.DeviceEditViewModel = new DeviceEditViewModel()
{
CategoriesListItems = repo.GetCategories().Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
}),
ManufactorListItems = repo.GetManufactors().Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
})
};
return View(vm);
}
現在我可以調用PartialView有:
@{ Html.RenderPartial("_Create", Model.DeviceEditViewModel); }
最後告訴partialView調用具體方法:
@using (Html.BeginForm("Create", "Device", FormMethod.Post))
{
// ... omitted
}
感謝
你哈另一個視圖模型在同一頁上?我遇到了這個問題,我的@ Html.DropDownList或我的視圖模型沒有錯。 – DfwForSale
是的,索引視圖強烈鍵入到一個模型'IEnumerable' –
Marco