使用 viewmodel 将不同的视图传递给分部视图
Using viewmodel to pass different views to partial views
我有一个呈现 2 个局部视图的视图。其中一部分是人员列表。另一部分是用于编辑单个人的模态编辑表单。我有一个包含人物模型和人物模型列表的视图模型。我将视图模型传递给视图并为部分指定特定模型。我收到一条错误消息,指出视图需要 PersonModel 而不是 PersonViewModel。但是,视图需要视图模型,否则将无法工作。
视图模型:
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)
人物编辑部分调用人物模型:
@model App.Models.Person
网格部分调用与列表相同的模型:
@model List<App.Models.Person>
如果页面只有一个部分,这工作正常,但这是我第一次尝试使用 2,但失败了。 Index 视图必须有 ViewModel 才能使部分视图工作,所以不确定为什么它不接受它。
我能够通过将 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" })
只想加上我的 2 美分,因为这也让我发疯。我所做的是为每个部分视图创建单独的视图模型。一种类似于PersonEdit,一种类似于PersonList。
所以您最终得到了主 VM 和 2 个较小的 VM。
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)
我有一个呈现 2 个局部视图的视图。其中一部分是人员列表。另一部分是用于编辑单个人的模态编辑表单。我有一个包含人物模型和人物模型列表的视图模型。我将视图模型传递给视图并为部分指定特定模型。我收到一条错误消息,指出视图需要 PersonModel 而不是 PersonViewModel。但是,视图需要视图模型,否则将无法工作。
视图模型:
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)
人物编辑部分调用人物模型:
@model App.Models.Person
网格部分调用与列表相同的模型:
@model List<App.Models.Person>
如果页面只有一个部分,这工作正常,但这是我第一次尝试使用 2,但失败了。 Index 视图必须有 ViewModel 才能使部分视图工作,所以不确定为什么它不接受它。
我能够通过将 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" })
只想加上我的 2 美分,因为这也让我发疯。我所做的是为每个部分视图创建单独的视图模型。一种类似于PersonEdit,一种类似于PersonList。
所以您最终得到了主 VM 和 2 个较小的 VM。
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)