3

私はブラッドウィルソンの記事の1つを読んでいました:

ASP.NET MVC 2テンプレート、パート2:ModelMetadata

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

ASP.NET MVC 3アプリで、次のモデルがあると仮定します。

public class Contact {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

そして、これが私の見解です:

@model MyApp.Models.Contact

<h2>Contact</h2>

@Html.EditorForModel()

パス内にContact.cshtmlファイルがあり~/Views/Shared/EditorTemplates/ます。

ModelMetadata私の質問は、各モデルプロパティにどのように連絡できるかです。たとえば、次のようになります。

Contact.cshtml

@model MyApp.Models.Contact

<input type="text" placeholder="@Model.FirstName.GetItsMetaData().Watermark" 
       value="@Model.FirstName" />

注: GetItsMetaDataメソッドは、私が完全に作成したものです。プロパティのMedelMetadataにアクセスしようとしています。そのようにする必要はありません。

編集

私は別の同様の質問を見つけました:

asp.netmvcのeditortemplateの複合型のModelMetadata

そして答えはこれです:

@{
    var metadata = ModelMetadata
        .FromLambdaExpression<TestThing, string>(x => x.Test2, ViewData);
    var watermak = metadata.Watermark;
}

しかし、私のモデルのすべてのプロパティに対してこれを行うのは非常に冗長ですよね?

4

1 に答える 1

4

この目的で使用するHtmlHelperを作成することはそれほど冗長ではありません。ヘルパーは次のようになります。

    public static string WatermarkFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        return metadata.Watermark;
    }

例では、次のように使用します。

@model MyApp.Models.Contact  

<input type="text" placeholder="@Html.WatermarkFor(x => x.FirstName)"   
    value="@Model.FirstName" /> 
于 2011-11-17T14:47:46.960 に答える