是否可以在EditorFor模板控件中使用DisplayFor()

时间:2011-01-30 21:49:09

标签: asp.net-mvc-2

我正在使用EditorFor()帮助器在我的视图中呈现编辑模板,我想调用此模板中的DisplayFor()来渲染显示模板。

喜欢这个

这是在/Shared/EditorTemplates/Client.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<BusinessNext.Models.Ef.Client>" %>
<%: Html.DisplayFor(client=>client) %>

在DisplayFor模板中,我渲染出客户端的属性。 DisplayFor模板在从其他地方调用时工作得很好,但是从EditorFor模板调用它不会渲染任何东西。似乎DisplayFor()调用实际上从未实际进入DisplayFor模板。

2 个答案:

答案 0 :(得分:4)

我担心唯一的方法是使用部分:

<%= Html.Partial("~/Views/Home/DisplayTemplates/Client.ascx", Model) %>

答案 1 :(得分:1)

如果模拟复杂对象是个好主意,或者我对嵌套模板的处理是否是黑客攻击,那么这可能是值得商榷的。这样做的好处是父母和子女的单一模板都可以有模板,而不必选择/使用部分视图。

除此之外,模板化视图可以嵌套,如果您使用部分视图作为介于两者之间。

外部模板将具有下面您要放置内部模板的内容:

Html.RenderPartial("SharedDisplayGoBetweenForFoo", item);  

共享部分看起来像这样:

@model Foo

@Html.DisplayFor(a => a);

然后会调用内部模板,看起来就像其他模板一样。