【发布时间】:2015-03-26 20:31:17
【问题描述】:
我有一个“注册申请”视图,包含 20 个字段。用户注册。用户注册后,我可以选择让用户更新已提交的组件。
例如:查看注册有“联系信息”、“地址信息”等部分,目前有 5 个部分。
所以在注册视图中,我创建了一个包含所有字段的视图模型@model ViewModels.RegisterVM。
对于编辑联系信息,我有自己的@model ViewModels.ContactInformationVM
现在,这是我的问题,因为两个视图将具有相同的标记代码,所以我决定为联系信息创建一个部分视图,以便我可以重用标记代码,并且能够在一个地方而不是两个地方管理它。
所以在注册视图中
@model ViewModels.RegisterVM
.......
@Html.Partial("~/Views/Shared/widget/_ContactInformation.cshtml", @Model)
在联系信息视图中我想重用这个局部视图
@model ViewModels.ContactInformationVM`
@Html.Partial("~/Views/Shared/widget/_ContactInformation.cshtml", @Model)
两个视图都有自己的视图模型,局部视图只能接受一个视图模型
不知道我应该在局部视图中声明什么视图模型
我知道我可以从部分视图中复制代码并将其放置在注册视图和联系信息视图中,这样可以解决问题。但我想知道是否有更好的方法来避免使用相同的代码在多个文件中。
我希望我的要求是有道理的。谢谢阅读。
【问题讨论】:
-
我强烈建议使用 ajax 调用将部分放在视图上。在这里查看我的答案stackoverflow.com/questions/18847735/…
-
如果我正确理解了这个问题,那么我很困惑。视图模型用于支持视图。如果您使用相同的 [部分] 视图,那么它们应该使用相同的视图模型。请记住,视图模型不是域模型——如果它们具有相同的数据,那么它们很可能是相同的模型;它们没有像域对象那样的语义差异。将模型重命名为
ContactInformation并使用它。 -
@MattBodily:通过 AJAX 提取部分内容如何解决这里的问题?
-
@ChrisPratt 执行 ajax 调用以加载局部视图比更改每个视图上的视图模型并尝试传递该信息要简单得多。反正在我看来
标签: asp.net-mvc-4 model-view-controller partial-views