0
我想將一些自定義模板應用於剃刀視圖。這有點特別,所以這裏是一個例子。剃刀視圖中的自定義模板
讓我們說出模型包含一個具有名字和姓氏的Person對象。
模板看起來像這樣女巫我將在CSHTML文件寫
<div data-template-id="testTemplate" data-template-model="@Model.Person">
<span>{{Firstname}}</span>
<span>{{Lastname}}</span>
</div>
然後,我會作出這樣的填充從Model.Person
與數據模板的HtmlHelper方法所以哈日我有有權訪問數據,但我不知道如何訪問視圖並獲取模板。
public static MvcHtmlString Test<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression){
var model = html.ViewData.Model;
string propName = "";
if (expression.Body is MemberExpression)
propName = ((MemberExpression)expression.Body).Member.Name;
var value = model.GetType().GetProperty(propName).GetValue(model, null);
// TODO: get template and insert data from model
return new MvcHtmlString($"<div>{value}</div>");
}
我知道這有點奇怪,爲什麼我會這樣做。但簡短的回答是,在某些情況下,我需要根據一些內部條件返回一些完全不同的html。在這種情況下,我會完全刪除模板。
第一我建議你描述一下你需要做什麼,如果沒有htmlhelper,因爲在我看來你是過於複雜的東西。如果你真的需要傳遞模型和模板,你可以這樣做:public static IHtmlString Test(這個HtmlHelper helper,ModelType模型,字符串模板),然後在剃刀Html.Test(Model,@「your template here」); – eugen
我沒有按照你的建議輸入模板的原因是由於我打算如何使用它。在編寫模板/標記時,我希望Visual Studio智能感知和代碼格式化。如果我把它寫成字符串輸入的話,那將會全部丟失。 – Galtrold