Asp.net mvc 将整个ViewModel传递到DisplayTemplate中?

Asp.net mvc 将整个ViewModel传递到DisplayTemplate中?,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我们正在尽最大努力不使用RenderPartial,而是在100%的情况下使用EditorFor和DisplayFor。但是,有一个场景我们到目前为止还没有开始工作:当部分视图需要整个ViewModel时,或者换句话说,当它需要Html.DisplayFor(m=>m,“需要EntityReviewModel的MyTemplate”)。如果它是Html.DisplayFor(m=>m.Prop,“MyTemplateThatOnlyNeedsOneProperty”)则可以正常工作,但我们无法传

我们正在尽最大努力不使用RenderPartial,而是在100%的情况下使用EditorFor和DisplayFor。但是,有一个场景我们到目前为止还没有开始工作:当部分视图需要整个ViewModel时,或者换句话说,当它需要
Html.DisplayFor(m=>m,“需要EntityReviewModel的MyTemplate”)
。如果它是
Html.DisplayFor(m=>m.Prop,“MyTemplateThatOnlyNeedsOneProperty”)
则可以正常工作,但我们无法传递整个ViewModel

有没有一种方法可以同时使用
DisplayFor
EditorFor
来实现这一点

我现在看到的是,要么没有任何内容(或者可能是空白)呈现到我的标记中。然而,编译器和ReSharper似乎都认为我的语法很好。将代码更改为调用RenderPartial效果很好,但这正是我试图避免的

我试试这三行。RenderPartial工作正常,EditorFors不工作(最终标记为空字符串或空白):

m,“RetailPriceRequests/PriceRequest/PriceRequestLoadGrid”);%%>
m、 “RetailPriceRequests/PriceRequest/PriceRequestLoadGrid”)%%>

如果您的显示模板是:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ExampleModel>" %>

DisplayFor(m => m, "ExampleModel")


如果您的DisplayTemplate是:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ExampleModel>" %>

DisplayFor(m => m, "ExampleModel")


每个DisplayTemplates的类型是什么?它们是非常定制的ViewModels。例如,我们有一个
BusinessDetailsViewModel
,将其传递给
BusinessSummary
(始终在屏幕上显示信息)和
BusinessDetails
(许多选项卡之一的内容)然后,
businessdetailsviewmodel
的各种属性被传递到其他选项卡中的显示/编辑器模板中。每个显示模板的类型是什么?它们是非常定制的视图模型。例如,我们有一个
BusinessDetailsViewModel
,将其传递给
BusinessSummary
(始终在屏幕上显示信息)和
BusinessDetails
(许多选项卡之一的内容)然后,
businessdetailsviewmodel
的各种属性被传递到其他选项卡中的显示/编辑器模板中。您的第一个示例正是我要做的,ExampleModel模板中没有HTML呈现(即使只是一个Hello World类型的模板)。最后两个示例不起作用-不能在lambda表达式中执行逻辑,只能指定一个属性<代码>异常详细信息:System.InvalidOperationException:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。是否从一个DisplayTemplate调用另一个DisplayTemplate?顺便说一句,我做
DisplayFor(m=>Model??new ExampleModel(),“ExampleModel”)
始终没有问题。。。你看到的这个例外可能是问题的第一个问题,是的,我们有一个复杂的相互调用的模板嵌套。然而,我也在hello world的场景中再现了这一点。你确定你一直都这么做吗?这个异常是我所期望的,并没有让我感到惊讶。我在尝试从DisplayTemplate中加载另一个DisplayTemplate时遇到了问题,在这种情况下,我只是使用RenderPartial来解决这个问题。也许这是一个特性/错误?你是对的,我用那种类型的编码做渲染部分,而不是显示。。。哎呀!您的第一个示例正是我要做的,ExampleModel模板中没有HTML呈现(即使只是一个Hello World类型的模板)。最后两个示例不起作用-不能在lambda表达式中执行逻辑,只能指定一个属性<代码>异常详细信息:System.InvalidOperationException:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。是否从一个DisplayTemplate调用另一个DisplayTemplate?顺便说一句,我做
DisplayFor(m=>Model??new ExampleModel(),“ExampleModel”)
始终没有问题。。。你看到的这个例外可能是问题的第一个问题,是的,我们有一个复杂的相互调用的模板嵌套。然而,我也在hello world的场景中再现了这一点。你确定你一直都这么做吗?这个异常是我所期望的,并没有让我感到惊讶。我在尝试从DisplayTemplate中加载另一个DisplayTemplate时遇到了问题,在这种情况下,我只是使用RenderPartial来解决这个问题。也许这是一个特性/错误?你是对的,我用那种类型的编码做渲染部分,而不是显示。。。哎呀!
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ExamplePropertyModel>" %>

DisplayFor(m => m.ExampleProperty, "ExamplePropertyModel")
RenderPartial("ExampleModel", Model ?? new ExampleModel());
RenderPartial("ExampleModel", 
    (Model ?? new ExampleModel() { ExampleProperty = new ExampleProperty() })
        .ExampleProperty ?? new ExampleProperty());