代码之家  ›  专栏  ›  技术社区  ›  IPValverde

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

  •  6
  • IPValverde  · 技术社区  · 14 年前

    我对创建MVC3 Helper有点不知所措。我有一个助手,它只创建一行,其中包含一个作为参数传递的表达式。

    我想这样使用我的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

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

    2 回复  |  直到 9 年前
        1
  •  6
  •   Community Mohan Dere    9 年前

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

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

        2
  •  2
  •   HatSoft    14 年前

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