我对viewmodel的工作有部分看法,但在主视图中渲染局部视图时我感到不便
我收到以下消息:
传递到字典中的模型项的类型为“RolMVC3.Models.USER”,但此字典需要“RolMVC3.Areas”类型的模型项。 Distributor.Models。 LocationViewModel'
View Model(LocationViewModel),ViewModel位于Area
中namespace RolMVC3.Areas.Distributor.Models
{
public class LocationViewModel
{
[Required]
public decimal IdDepartment { get; set; }
[Required]
public string NameCity { get; set; }
[Required]
public string NameNeighborhood { get; set; }
}
}
}
部分视图(_LocationEdit):
@model RolMVC3.Areas.Distributor.Models.LocationViewModel
.....
.....
<div class="editor-label">
@Html.LabelFor(model => model.IdDepartment)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.IdDepartment, new SelectList(ViewBag.Department as System.Collections.IEnumerable, "IdDepartment", "NameDepartment", ViewBag.selectedDepartment), "--- Select ---", new { id = "Department"})
@Html.ValidationMessageFor(model => model.Idepartment)
</div>
.....
.....
主视图(编辑):
@model RolMVC3.Models.USER
@{
ViewBag.Title = "Edit User";
}
....
....
@{Html.RenderPartial("_LocationEdit");}
....
....
我如何解决这个问题?
祝福
答案 0 :(得分:0)
当你调用你的RenderPartial时,你需要传递一个模型类型的LocationViewModel。现在看起来你没有在编辑视图中看到这个,所以你需要a)从你的控制器将它添加到viewbag并通过你的RenderPartial调用传递它或b)在你的编辑视图中更改模型类型(您可能需要一个包含用户和locationviewmodel信息的包装器
<强> [编辑] 强> 源代码看起来如下所示:
// ViewModel
namespace RolMVC3.Areas.Distributor.Models
{
public class EditPageViewModel
{
public LocationViewModel LocationViewModel {get;set;]
public USER User { get; set; }
}
}
// Edit View
@model RolMVC3.Areas.Distributor.Models.EditPageViewModel
@{
ViewBag.Title = "Edit User";
}
....
....
@Html.RenderPartial("_LocationEdit",Model.LocationViewModel);
....
....
答案 1 :(得分:0)
在主视图(编辑)中传递LocationViewModel,因为部分视图需要此模型而您未在@Html.RenderPartial
中传递
@model RolMVC3.Models.USER
@{
ViewBag.Title = "Edit User";
}
....
....
@{Html.RenderPartial("_LocationEdit",YourLocationViewMODEL);}
....
....