2

編集: David Ruttka のおかげで、Mvc3 の RTM リリースから LabelExtensions.cs を見た後、それを理解することができました。

フィールド名: string field = ExpressionHelper.GetExpressionText(expression);

モデルについては、ヘルパーの場合と同様にキャストしたいモデルを指定する必要がありました。TModel:Foo で、モデルを取得できます。BarTypeEnum barType = ((Foo)html.ViewData.Model).BarType;

以下のソースを、私にとって機能するものに更新しました。

/編集

Mvc3 の LabelFor に似た html ヘルパー関数を作成して、Foo.BarType と html から渡された Foo のフィールドの名前に基づいて文字列値を返そうとしています。

以下の関数 FooLabelFor で、関数に渡されるモデルとフィールド名を取得するにはどうすればよいですか?

System.Web.Mvc.HtmlLabelFor のソースを探しに行きましたが、Mvc3 ソース コードで見つけることができませんでした。

//model class
public class Foo
{
    public string Bar { get; set; }
    public BarTypeEnum BarType { get; set; }
}

//html helper class
public static class HtmlHelpers {
    public static string FooLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where TModel:Foo
    {
        BarTypeEnum barType = ExpressionHelper.GetExpressionText(expression);
        string field = ((Foo)html.ViewData.Model).BarType;
        return GlobalizeText(enumHelper.stringvalue(barType), field);
    }  
}

//html
@model Foo
<div>@Html.FooLabelFor(m => m.Bar)</div>
4

1 に答える 1

0

次のように、ヘルパーに追加の引数として渡すバーの種類とフィールド名:

public static string FooLabelFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, BarTypeEnum barType, string fieldName)
 {
  //...
 }

次に、ヘルパーの本文にコードを追加して、ラベルに適切なテキストを決定する必要があります。たとえば、そのテキストを。という変数に入れるとしますtheText。今必要なのは:

var theLabel = htmlHelper.Label(id, HttpUtility.HtmlEncode(theText));

return MvcHtmlString.Create(theLabel);

それがお役に立てば幸いです。

于 2012-04-25T19:35:49.243 に答える