2011-11-19 19 views
4

我有例如一類:我可以在MVC3中爲同一個類使用多個編輯器模板嗎?

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) 

但是如果我想要什麼有兩個編輯器模板或兩個顯示模板,併爲同一個類使用一個或另一個?這可能嗎?

回答

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

「如果模板名稱的TEMPLATENAME參數相匹配的控制器的EditorTemplates文件夾中找到,則使用該模板渲染表達。如果沒有找到模板在控制器的EditorTemplates文件夾中,搜索Views \ Shared \ EditorTemplates文件夾以找到與templateName參數名稱匹配的模板,如果未找到模板,則使用默認模板。

+0

我想我明白了。這是什麼意思關於「控制器的editortemplates文件夾」。我想知道我應該在哪裏存儲我的編輯模板,我從來沒有聽說過這個位置?我是否可以保留相同的名稱,但在不同的控制器editortemplates文件夾中有不同的模板? –

+0

您可以爲任何你想要的模型製作模板。例如,對於名爲'MyModel'的模型,只需創建一個名爲MyModel.cshtml的文件。然後,當你調用EditorFor()時,MVC首先在\ Views \ CurrentController \ EditorTemplates \上查找它,如果沒有找到它,它將在\ Views \ Shared \ EditorTemplates \上查找,最後,如果沒有找到,它會顯示默認值。 DisplayFor()'helper可以做同樣的事情,但是文件夾是DisplayTemplates \。 – Joao

+0

當我說模型時,它可以是任何類的類型。例如,你可以爲'string'做到這一點。只需創建一個string.cshtml文件。現在,每次使用'EditorFor(model => model.MyStringProperty)時,它都會使用您的模板,而不是默認模板。 – Joao

13

是的,您可以使用「默認」,名稱爲Book.cshtml ......並且每次使用EditorFor時都會觸發此設置。

您可以爲Book定製另一個編輯器模板,比如說調用它BookTheOtherWay.cshtml,並在那裏放置「其他編輯器視圖」。現在,在使用EditorFor時,您只需將模板名稱作爲EditorFor模板中的其他參數傳遞即可。

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

這對於DisplayTemplates和DisplayFor幫助程序的工作方式相同。

@Html.DisplayFor(model => model.MyBook, "BookTheOtherWay") 
相關問題