2

我需要为不同类型的数据创建一个编辑器模板,例如:对于字符串,我需要一个用于 largeString 和 shortstring 的 EditorTemplate

我发现对我来说最好的方法是使用编辑器模板。那么我可以使用 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

使用 [附加元数据]

视图模型:

 [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 回答