【问题标题】:MVC3 how to use @<text></text> as html helper parameterMVC3 如何使用 @<text></text> 作为 html 辅助参数
【发布时间】: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));
    }

我什至无法编译它,因为 @&lt;text&gt;...&lt;/text&gt; 参数对于 HtmlHelper 无效,因为它是“lambda 表达式”,无法转换为 Expression>

谁能帮忙解决?我只想将任何类型的@&lt;text&gt;&lt;/text&gt; 传递给我的HtmlHelper,它只是编译它并将它的MvcHtmlString 放入格式化的返回中。

解决方案:

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

@&lt;text&gt;&lt;/text&gt; 的参数类型必须是 Func&lt;object, HtmlHelper&gt;

【问题讨论】:

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


    【解决方案1】:

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

    @&lt;text&gt;&lt;/text&gt; 的参数类型必须是 Func&lt;object, HelperResult&gt;

    【讨论】:

      【解决方案2】:

      &lt;text&gt;...&lt;/text&gt; or @: 是 Razor 语法(不是 C#)来避免 html 元素,所以我的建议是你使用字符串作为参数而不是 @&lt;text&gt;

      【讨论】:

      • 但是这样做我将失去在参数中使用 html 助手的强类型优势。无论如何,如果我使用字符串,有没有办法可以在我的 Helper 中编译它? (想象一下由我的 标签示例的内容形成的字符串)
      猜你喜欢
      • 2013-06-13
      • 2017-03-05
      • 2021-08-04
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多