我可以在MVC3中为同一个类使用多个编辑器模板吗?

时间:2011-11-19 02:31:28

标签: asp.net-mvc asp.net-mvc-3

我有一个类:

public class Book
{
public int BookId { get; set; }
public string BookName { get; set; }
public string Description { get; set; }
}

和编辑器模板:

@model MySimpleEditorTemplate.Models.Book

@Html.DisplayFor(p => p.BookId)     @Html.EditorFor(p => p.BookId)
@Html.DisplayFor(p => p.BookName)   @Html.EditorFor(p => p.BookName)
@Html.DisplayFor(p => p.Description)    @Html.EditorFor(p => p.Description)

我可以使用这样的编辑器模板:

@Html.EditorFor(model => model.Book) 

然而,如果我想拥有两个编辑器模板或两个显示模板并使用同一个类中的一个或另一个,该怎么办?这可能吗?

2 个答案:

答案 0 :(得分:13)

是的,您可以使用名称为Book.cshtml的“默认”...并且每次使用EditorFor时都会触发此默认值。

您可以为Book设置另一个编辑器模板,让我们称之为BookTheOtherWay.cshtml并在那里放置“其他编辑器视图”。现在,使用EditorFor时,您只需要将模板名称作为EditorFor模板中的其他参数传递。

@Html.EditorFor(model => model.MyBook, "BookTheOtherWay" )

对于DisplayTemplates和DisplayFor帮助程序,它的工作方式相同。

@Html.DisplayFor(model => model.MyBook, "BookTheOtherWay" )

答案 1 :(得分:4)

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName
)

http://msdn.microsoft.com/en-us/library/ff406506.aspx

“如果在控制器的EditorTemplates文件夹中找到名称与templateName参数匹配的模板,则该模板用于呈现表达式。如果在控制器的EditorTemplates文件夹中找不到模板,则Views \ Shared \ EditorTemplates文件夹为搜索了与templateName参数名称匹配的模板。如果找不到模板,则使用默认模板。“