MVC3如何使用@ <text> </text>作为html辅助参数

时间:2012-08-26 20:38:48

标签: c# asp.net-mvc-3 lambda html-helper

我对创建一个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&gt;

任何人都可以帮忙解决它?我只想将任何类型的@<text></text>传递给我的HtmlHelper,它只是编译它并将它的MvcHtmlString放入格式化的返回中。

SOLUTION:

我在这篇文章中找到了我想要的内容: ASP.Net MVC3 - Pass razor markup as a parameter

@<text></text>的参数类型必须是Func<object, HtmlHelper>

2 个答案:

答案 0 :(得分:5)

我在这篇文章中找到了我想要的内容: ASP.Net MVC3 - Pass razor markup as a parameter

@<text></text>的参数类型必须是Func<object, HelperResult>

答案 1 :(得分:2)

<text>...</text> or @:是一种Razor语法(不是C#)来避免使用html元素,所以我的用法是使用字符串作为参数而不是@<text>