6

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 に対して無効であるため、コンパイルすることもできません>

誰でもそれを解決するのを助けることができますか? 任意の種類を HtmlHelper に渡したいだけ@<text></text>で、それをコンパイルして MvcHtmlString を書式設定された戻り値に入れるだけです。

解決:

この投稿で探していたものを見つけました: ASP.Net MVC3 - パラメータとしてかみそりのマークアップを渡す

のパラメータ タイプ@<text></text>Func<object, HtmlHelper>!

4

2 に答える 2

6

この投稿で探していたものを見つけました: ASP.Net MVC3 - パラメータとしてかみそりのマークアップを渡す

のパラメータ タイプ@<text></text>Func<object, HelperResult>!

于 2012-08-26T23:26:06.103 に答える
2

これ<text>...</text> or @:は、html 要素を回避するための Razor 構文 (C# ではない) であるため、代わりに文字列をパラメーターとして使用することをお勧めします。@<text>

于 2012-08-26T20:54:23.827 に答える