我有一个视图,呈现2个部分视图。一部分是人员清单。另一部分是用于编辑单个人的模态编辑表单。我有一个viewmodel,包含一个人模型和一个人模型列表。我将viewmodel传递给视图并指定部分的特定模型。我得到一个错误,说该视图需要PersonModel而不是PersonViewModel。但是,视图需要viewmodel或它不起作用。
Viewmodel:
public class PersonViewModel
{
public Person Person { get; set; }
public List<Person> PeopleList { get; set; }
}
视图(索引):
@model App.Models.ViewModels.PersonViewModel
<h1>Manage People</h1>
@Html.Partial("_personEditForm", Model.Person)
@Html.Partial("_PersonGrid", Model.PersonList)
person edit partial调用Person模型:
@model App.Models.Person
并且网格部分调用与列表相同的模型:
@model List<App.Models.Person>
如果页面只有一个部分,这可以正常工作,但这是我第一次尝试使用2并且失败了。索引视图必须具有ViewModel才能使部分工作,因此不确定它为什么不接受它。
答案 0 :(得分:0)
我能够通过将ViewModel传递给视图并将其传递给两个部分来解决这个问题:
@model App.Models.ViewModels.PersonViewModel
<h1>Manage People</h1>
@Html.Partial("_PersonEditForm", Model)
@Html.Partial("_PersonGrid", Model)
然后在partials中,我在viewmodel中指定了模型。例如,在部分形式中,文本框助手来自:
@Html.TextBoxFor(m => m.FirstName, new { @class = "form-control" })
要
@Html.TextBoxFor(m => m.Person.FirstName, new { @class = "form-control" })
答案 1 :(得分:0)
只是想加我2美分,因为这也让我发疯了。我所做的是为每个部分视图创建单独的视图模型。一个类似于PersonEdit,一个类似于PersonList。
所以你最终得到了你的主虚拟机和2个较小的虚拟机。
public class PersonIndexViewModel
{
public PersonEditViewModel Person { get; set; }
public List<PersonListViewModel> PeopleList { get; set; }
}
public class PersonEditViewModel
{
// ...whatever info you want in your edit view
}
public class PersonListViewModel
{
// ... whatever info you want in your table grid
}
然后你这样称呼它
@model App.Models.ViewModels.PersonViewModel
<h1>Manage People</h1>
@Html.Partial("_PersonEditForm", Model.Person)
@Html.Partial("_PersonGrid", Model.PeopleList)