【问题标题】:Using viewmodel to pass different views to partial views使用 viewmodel 将不同的视图传递给局部视图
【发布时间】:2015-06-04 21:09:02
【问题描述】:

我有一个呈现 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 才能使部分工作,所以不确定为什么它不会接受它。

【问题讨论】:

    标签: asp.net-mvc viewmodel partial-views


    【解决方案1】:

    我能够通过将 ViewModel 传递给视图并将其传递给两个部分来解决此问题:

    @model App.Models.ViewModels.PersonViewModel
    
    <h1>Manage People</h1>
    
    @Html.Partial("_PersonEditForm", Model)
    @Html.Partial("_PersonGrid", Model)
    

    然后在局部视图中,我指定了视图模型中的模型。例如,在部分表单中,文本框助手来自:

    @Html.TextBoxFor(m => m.FirstName, new { @class = "form-control" })
    

    @Html.TextBoxFor(m => m.Person.FirstName, new { @class = "form-control" })
    

    【讨论】:

      【解决方案2】:

      只是想加我的 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)
      

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 2014-06-28
        • 2010-11-05
        • 2019-02-01
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多