Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 页面需要继承2个视图模型并显示所需的模型_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

Asp.net mvc 页面需要继承2个视图模型并显示所需的模型

Asp.net mvc 页面需要继承2个视图模型并显示所需的模型,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我有一个内容页面,它很乐意显示继承contentModel。我需要更改页面,以便它也可以显示另一个viewModel(例如revertedContent),但仅在需要其他显示普通contentModel时才显示 我相信有一个简单的方法可以做到这一点,这只是一个痛苦,因为我需要确保页面不会在url中更改,例如details.aspx保持原样,但可以显示当前内容或以前版本的内容 提前欢呼您是否可以创建一个“父”视图模型,它同时包含contentModel和revertedContent对象?将此新视

我有一个内容页面,它很乐意显示继承contentModel。我需要更改页面,以便它也可以显示另一个viewModel(例如revertedContent),但仅在需要其他显示普通contentModel时才显示

我相信有一个简单的方法可以做到这一点,这只是一个痛苦,因为我需要确保页面不会在url中更改,例如details.aspx保持原样,但可以显示当前内容或以前版本的内容

提前欢呼

您是否可以创建一个“父”视图模型,它同时包含
contentModel
revertedContent
对象?将此新视图模型发送到视图,并检查revertedContent成员是否为null

public class ParentViewModel
{
    public contentModel content { get; set; }
    public revertedContent reverted { get; set; }
}
然后是景色

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YourNamespace.ParentViewModel>" %>
...
<% if(!Model.reverted) { %>
    //do regular content here
<% } else { %>
    //do reverted content here
<% } %>

...
//在这里做常规内容
//是否在此处还原内容

大卫的答案是一个方向。我会考虑在食物链上做一些更高级的事情——比如让控制器选择视图以及提供视图模型。

视图被认为是“愚蠢的”(并且只有一个责任) 我认为您不完全理解Asp.NETMVC概念模型。视图被认为是愚蠢的,并且具有所需的逻辑性。分而治之是这里的规则。因此,如果您对特定数据有两个不同的视图,那么您还需要构建两个自定义视图

控制员应该是这里最聪明的人。因此,给观点提供决策的可能性并不是正确的做法

无论如何,决策几乎肯定是基于应用程序模型状态的,所以由控制器决定显示哪个视图,并为特定视图提供正确的模型

从同一控制器操作返回各种视图并不少见。每个控制器操作都应该有一个视图,这不是一成不变的。这样,我们会得到包含太多代码的臃肿视图,从而使它们无法维护。基本上,我们会破坏MVC模型中所有关注点的分离

因此,当您希望从控制器返回特定视图时,您可以在从控制器操作返回时始终提供其名称:

return View("ViewName", model);

我建议您分析和重构您的流程。我建议更改视图模型设计,以适应该场景,不要使用两个不相关的视图模型,而是确保两者都适合同一类型

只有您知道哪种设计对您的应用程序有意义


我会盲目猜测,并建议您在视图中始终可以使用ContentViewModel<强>在它中有一个IsRealDevin属性,你可以在视图中查看任何额外的信息>/P>你可能想考虑为你的一些其他问题选择答案。如果你接受他们,你将获得声誉<代码>型号。还原的的值已在控制器操作中。那么,究竟为什么要让这种观点复杂化呢?为什么他不能将此
if
放入控制器操作,并拥有两个可管理的视图,而不是一个臃肿的视图?为什么逆流而上?这违背了Asp.NETMVC的概念模型原则。