我正在尝试将一些自定义模板应用于剃刀视图。它有点特别,所以这是一个例子。
让我们说模型包含一个带有名字和姓氏的Person对象。
模板看起来像我将在cshtml文件中写的这个女巫
<div data-template-id="testTemplate" data-template-model="@Model.Person">
<span>{{Firstname}}</span>
<span>{{Lastname}}</span>
</div>
然后我会创建一个HtmlHelper方法,用Model.Person中的数据填充模板
所以我可以访问数据,但我不知道如何访问视图并获取模板。
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。在这种情况下,我会完全删除模板。
答案 0 :(得分:0)
我自己找到了解决这个问题的方法。我最终传递了一个@helper方法作为模板。喜欢这个
@Html.Test(p => ImageTemplate(p.Avater))
@helper ImageTemplate(Picture avater)
{
<h1 style="color: red">@avater.Title</h1>
<h5>@avater.Url</h5>
}
我会这样使用它:
from a in A
join b in B on keys(a) equals keys(b) into aBs
from b in aBs.DefaultIfEmpty()
//...
这种方法提供了代码格式化,智能感知,可重用性,当然还有覆盖漏洞的能力。