【发布时间】:2012-08-17 01:05:27
【问题描述】:
我收到此错误:
模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。
这是我的代码(自定义 HTML 帮助程序,包装 DisplayFor 以便我可以选择模板):
public static string DisplayLocationTypeFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, LocationType>> expression, bool plural = false)
{
return plural ?
htmlHelper.DisplayFor(expression, "LocationTypePlural").ToHtmlString() :
htmlHelper.DisplayFor(expression).ToHtmlString();
}
当我这样使用它时,它可以工作:
@Html.DisplayLocationTypeFor(model => model.LocationType)
因为model 具有LocationType 的属性。
但是当我在 另一个 自定义 HTML 帮助器中执行此操作时:
public static MvcHtmlString SearchPreferenceButtonForModel<TModel>(this HtmlHelper<TModel> htmlHelper)
{
// .. other code
foreach (var property in htmlHelper.ViewData.ModelMetadata.Properties)
{
if (property.PropertyName == "LocationType")
htmlHelper.DisplayLocationTypeFor(model => ((LocationType)Enum.ToObject(typeof(LocationType), property.Model)), true);
}
}
它出错了。
我可以将我的 DisplayLocationTypeFor 助手更改为使用 htmlHelper.Display,但我不确定如何。
有什么想法吗?
我想要做的, 是我有一种特定的方式来渲染 LocationType 模型,我希望在整个站点上发生这种情况。在内部,模板使用资源文件,以及基于 URL 的其他一些智能。换句话说,这是有逻辑的——我不想重复。
这样,我的所有视图/模板都调用此模板作为呈现LocationType 的标准方式。
【问题讨论】:
-
你到底想做什么?你能告诉我们背景吗?可能还有其他解决方案可以实现这一目标。
-
@Mohayemin - 经过推理编辑。
标签: c# asp.net-mvc-3 razor lambda display-templates