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

Sam*_*tar 4 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; }
}
Run Code Online (Sandbox Code Playgroud)

和编辑器模板:

@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)
Run Code Online (Sandbox Code Playgroud)

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

@Html.EditorFor(model => model.Book) 
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*ias 13

是的,您可以拥有"默认"的名称Book.cshtml,并且每次使用时都会触发此名称EditorFor.

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

@Html.EditorFor(model => model.MyBook, "BookTheOtherWay" )
Run Code Online (Sandbox Code Playgroud)

这对DisplayTemplates和DisplayFor帮助程序的工作方式相同.

@Html.DisplayFor(model => model.MyBook, "BookTheOtherWay" )
Run Code Online (Sandbox Code Playgroud)


Los*_*ter 4

是的

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName
)
Run Code Online (Sandbox Code Playgroud)

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

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