我正在使用带有Razor视图引擎的ASP.NET MVC 3进行编程。这就是我能够做到的:
@Html.DisplayWithLabel(model => model.DisplayEventDate(), "When", "")
DisplayWithLabel
是一个自定义HTML帮助程序,用于显示带标签的内容。
这是它的签名(或者至少我认为应该是这样的):
public static MvcHtmlString DisplayWithLabel<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, Func<MvcHtmlString>>> expression, string label, string cssClass)
为什么我这样使用我的模型?好吧,我想为我的模型提供扩展方法,以帮助我在必要时格式化数据(而不是在模型本身内部格式化数据)。例如,为了格式化事件日期,我有这个扩展方法:
public static MvcHtmlString DisplayEventDate(this MyEntity entity)
{
return new MvcHtmlString(string.Format("{0}@{1}", string.Format("{0:D}", entity.EventDate),
string.Format("{0:t}", entity.EventDate)));
}
但是当我尝试浏览视图时,我收到一条错误消息,指出无法隐式转换为MvcHtmlString
到Func<MvcHtmlString>
。
我试图弄清楚自己,但我找不到线索所以请帮帮我:)。
答案 0 :(得分:1)
你应该可以这样做:
public static MvcHtmlString MyMethodName<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string myText) {
var exprValue = ModelMetadata.FromLambdaExpression(expression,
htmlHelper.ViewData).Model;
var builder = new TagBuilder("label");
builder.SetInnerText(myText + " " + exprValue.ToString());
return MvcHtmlString.Create(builder.ToString());
}