【发布时间】:2012-08-26 20:38:47
【问题描述】:
我对创建 MVC3 助手有点迷茫。我有我的助手,它只是创建一个带有作为参数传递的表达式的行。
我想像这样使用我的 htmlHelper:
@Html.AddTableFormField(model => model.UserName, @<text>
@Html.EditorFor(m => m.UserName)<span class="warning">Use only letters</span>
</text>)
这是我的 HtmlHelper(删除了一些不相关的代码):
public static MvcHtmlString AddTableFormField<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> property, Expression<Func<TModel>> customFormat = null)
{
var metadata = ModelMetadata.FromLambdaExpression(property, htmlHelper.ViewData);
string displayName = metadata.DisplayName;
var propName = metadata.PropertyName;
if (string.IsNullOrWhiteSpace(displayName))
displayName = propName;
MvcHtmlString htmlCustomFormat = null;
if (customFormat != null)
{
var deleg = customFormat.Compile();
htmlCustomFormat = new MvcHtmlString(deleg().ToString());
}
else
htmlCustomFormat = htmlHelper.EditorFor(property);
return new MvcHtmlString(string.Format("<tr>"+
"<td class=\"form-label\">"+
"<label class=\"editor-label\" for=\"{0}\">{1}<label>"+
"</td>"+
"<td class=\"form-data\">"+
"{2}"+
"</td>"+
"</tr>",
propName, displayName, htmlCustomFormat));
}
我什至无法编译它,因为 @<text>...</text> 参数对于 HtmlHelper 无效,因为它是“lambda 表达式”,无法转换为 Expression>
谁能帮忙解决?我只想将任何类型的@<text></text> 传递给我的HtmlHelper,它只是编译它并将它的MvcHtmlString 放入格式化的返回中。
解决方案:
我在这篇文章中找到了我正在寻找的内容: ASP.Net MVC3 - Pass razor markup as a parameter
@<text></text> 的参数类型必须是 Func<object, HtmlHelper>!
【问题讨论】:
标签: c# asp.net-mvc-3 lambda html-helper