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>
!