2011-11-21 36 views

回答

0

您可以傳遞模板的位置作爲第二個參數。

@Html.EditorFor(x => x.Foo, "~/Views/Custom/EditorTemplates/ViewModelName.cshtml") 

這就是說我會避免這樣做,並堅持公約。這意味着如果你想從定義區域之外使用一些編輯器模板,那麼你可能沒有在正確的地方定義這個模板,而應該將它移動到共享文件夾中。

+0

它不總是默認爲共享文件夾嗎?如果可能,我想保持它非常地方。 –

+0

@RichardM,是的,它默認爲共享文件夾。但從我的理解你的問題你試圖爲你的編輯模板使用一些自定義的位置。如果您不遵循約定,則需要指定模板的路徑。 –

+0

不幸的是,你不能指定編輯器模板的完整路徑。 – Dyppl

3

這些都是默認查找路徑,這RazorViewEngine將搜索編輯模板,按以下順序:

"~/Areas/{area}/Views/{controller}/EditorTemplates/{templateName}.cshtml", 
"~/Areas/{area}/Views/Shared/EditorTemplates/{templateName}.cshtml", 
"~/Views/{controller}/EditorTemplates/{templateName}.cshtml", 
"~/Views/Shared/EditorTemplates/{templateName}.cshtml", 

如果沒有指定,templateName值默認爲對象類型(在你的情況「ViewModelName」)。如果MVC未找到具有此名稱的模板,則會回退以使用已知的內置模板(int,string,collection,object等)來解析呈現。

您可以指定模板名稱改寫默認值:

@Html.EditorFor(m => m.MyDate, "_MyTemplate") 

您也可以指定相對路徑:

@Html.EditorFor(m => m.MyDate, "../_MyTemplate") 

無法指定以任何形式(例如:"~/Views/Custom/EditorTemplates/ViewModelName")的完整路徑和你不應該在模板名稱中指定擴展名(例如:'_MyTemplate.cshtml''_MyTemplate.vbhtml')!

相關問題