【问题标题】:Passing fields from parent view model to child (partial) view MVC + Razor将字段从父视图模型传递到子(部分)视图 MVC + Razor
【发布时间】:2014-02-04 21:10:27
【问题描述】:

我有一个GroupPageViewModel,它有一个public string GroupName { get; },还有一个服务方法的输入模型EditGroupInputModel,它也有一个public string GroupName { get; set; }。

在页面视图中,我想为Group、Html.Partial("~/Views/Group/_EditGroup.cshtml", ???) 或使用EditorFor 呈现编辑器。

我希望_EditGroup.cshtml 的model 成为EditGroupInputModel,但它需要从父视图的GroupName 属性中知道GroupName。

我意识到我可以使用 Html.Partial("~/Views/Group/_EditGroup.cshtml", new EditGroupInputModel() { GroupName = Model.GroupName}) ,但我觉得这在某种程度上偏离了 MVC 框架的意图(或者我只是没有看到这样的示例)。

这是将此类参数传递给局部视图模型的“最佳实践”方式,还是使用 MVC 框架有更好的方法?

【问题讨论】:

  • 您不能在 EditGroupInputModel 中创建 ParentGroupName 属性吗?然后你只需将模型传递给你的局部视图: Html.Partial("~/Views/Group/_EditGroup.cshtml", model.EditGroupInputModel)
  • @markpsmith,并不是每个GroupPageViewModel 都应该有一个EditGroupInputModel (编辑只是你可以做的许多操作之一,为了争论)
  • 啊好吧,我想我误会了
  • 在构建模型类时利用 EditGroupInputModel.GroupName 视图模型的 {get;set;} 属性。在集合中,您可以使 this.GroupName = base.GroupName 像这样。我不确定语法,但我知道你必须使用 {get;set}

标签: c# asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

我没有错

Html.Partial("~/Views/Group/_EditGroup.cshtml", new EditGroupInputModel() { GroupName = Model.GroupName}) 

我通常在构造函数中传递父视图的模型,所以由子模型决定它需要什么:

查看:

Html.Partial("~/Views/Group/_EditGroup.cshtml", new EditGroupInputModel(Model))

EditGroupInputModel.cs:

EditGroupInputModel(GroupPageViewModel parentModel) 
{ 
    GroupName = parentModel.GroupName;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多