2

たとえば、さまざまなタイプのデータ用のエディターテンプレートを作成する必要があります。文字列の場合、largeStringとshortstringのエディターテンプレートが必要です。

私にとって最良の方法は、エディターテンプレートを使用することです。だから私はAdditionalMetadataを使用できますか?このようなもののために?

 [UIHint("StringLarge")]
    [AdditionalMetadata("width", "50px")]
    public DateTime Date { get; set; }

私のエディターテンプレートStringLarge.cshtml

@inherits System.Web.Mvc.WebViewPage<System.String> 

if("have AdditionalMetadata"){
@Html.TextBox("", Model, new { @class = "StringLarge" })
}
else
{
@Html.TextBox("", Model, new { @class = "StringShort" })
}

それを行うことはできますか、それともstringLargeとStringShortの個別のEditorTemplateを作成できますか?

4

2 に答える 2

3

これを行うには、 IMetadataAwareインターフェイスを実装するカスタム属性を記述します。

public class MyStringsAttribute : Attribute, IMetadataAware
{
    private readonly string _value;
    public MyStringsAttribute(string value)
    {
        _value = value;
    }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.TemplateHint = "Strings";
        metadata.AdditionalValues["someKey"] = _value;
    }
}

その後:

[MyStrings("somevalue")]
public DateTime Date { get; set; }

最後に、カスタムエディタテンプレート(~/Views/Shared/EditorTemplates/Strings.cshtml)内で、この追加のメタデータの存在を確認できます。

@{
    var additionalMetadata = (string)ViewData.ModelMetadata.AdditionalValues["someKey"];
}

@if (string.Equals(additionalMetadata, "somevalue"))
{
    ...    
}
else
{
    ...
}
于 2012-09-20T13:09:11.423 に答える
0

[AdditionalMetadata]を使用する

ViewModel:

 [UIHint("StringCorto")]
    [AdditionalMetadata("style", "width:100px")] 
    public string Nit { get; set; }

エディターテンプレート:

@inherits System.Web.Mvc.WebViewPage<System.String> 


@{
    this.ViewData.ModelMetadata.AdditionalValues.Add("class", "StringCorto");
}


@Html.TextBox(string.Empty, ViewContext.ViewData.TemplateInfo.FormattedModelValue, this.ViewData.ModelMetadata.AdditionalValues)
于 2012-09-20T14:48:45.590 に答える