2012-04-25 9 views
2

EDIT: David Ruttkaのおかげで、私はMvc3のRTMリリースからLabelExtensions.csを見て、それを理解することができました。MVC3拡張メソッド<TModel、TValue>

フィールド名: 文字列フィールド= ExpressionHelper.GetExpressionText(式); BarTypeEnum barType =((フー)html.ViewData.Model:Fooの 、私はモデルで得ることができます:モデルの場合

、私はTModelのヘルパー 用としてキャストしたいモデルを指定するために必要な).BarType;

以下のソースを私のために更新しました。

/EDIT

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

以下の関数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> 
+0

FWIW 'LabelFor'は' LabelExtensions'クラスにあります。 '\ src \ SystemWebMvc \ Mvc \ Html \ LabelExtensions.cs' –

+0

あなたは実際にここで質問していません。 – Robaticus

+0

@DavidRuttka - codeplexのソースコードブラウザ:https://aspnet.codeplex.com/SourceControl/changeset/view/77537およびソースコードダウンロードにはLabelExtensions.csが含まれていません。私はそれをどこからダウンロードできるのか知っていますか? – StormRider01

答えて

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); 

私は役立つことを望みます。

+0

(BarTypeEnum barType、私はhtmlパラメータからbarTypeを引き出すことができ、式からfieldNameを引き出すことができるはずです。 – StormRider01