如何在 ASP.NET MVC 2 中使用 DataType.Custom?

问题描述 投票:0回答:3

谁能告诉我如何在 ASP.NET MVC 2 中使用 DataType.Custom?

asp.net-mvc-2 data-annotations types
3个回答
5
投票

请勿使用

DataType.Custom

而是将

[DataType("YourCustomDataTypeHere")]
与名为
YourCustomDataTypeHere
的编辑器/显示模板一起使用。


2
投票

我个人没用过,但是看MSDN好像只是设置

DataType = DataType.Custom
CustomDataType = "String"
的问题。然后,当您处理模型时,您将检查 DataType.Custom,如果找到,则根据 CustomDataType 中的值执行不同的操作。

这是他们在 MSDN - 如何:自定义数据模型中非内在数据类型的数据字段外观和行为

上提供的示例
public partial class TextField : System.Web.DynamicData.FieldTemplateUserControl {

    string getNavUrl() {

        var metadata = MetadataAttributes.OfType<DataTypeAttribute>().FirstOrDefault();
        if (metadata == null)
            return FieldValueString; 

        switch (metadata.DataType) {

            case DataType.Url:
                string url = FieldValueString;
                if (url.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
                    url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
                    return url;

                return "http://" + FieldValueString;


            case DataType.EmailAddress:
                return "mailto:" + FieldValueString;

            default:
                throw new Exception("Unknown DataType");
        }
    }

    protected override void OnDataBinding(EventArgs e) {
        base.OnDataBinding(e);

        if (string.IsNullOrEmpty(FieldValueString))
            return;

        var metadata = MetadataAttributes.OfType<DataTypeAttribute>().FirstOrDefault();

        if (metadata == null || string.IsNullOrEmpty(FieldValueString)) {
            Literal literal = new Literal();
            literal.Text = FieldValueString;
            Controls.Add(literal);
            return;
        }

        if (metadata.DataType == DataType.Url ||
            metadata.DataType == DataType.EmailAddress) {

            HyperLink hyperlink = new HyperLink();
            hyperlink.Text = FieldValueString;
            hyperlink.NavigateUrl = getNavUrl();
            hyperlink.Target = "_blank";
            Controls.Add(hyperlink);
            return;
        }

        if (metadata.DataType == DataType.Custom &&
           string.Compare(metadata.CustomDataType, "BoldRed", true) == 0) {
            Label lbl = new Label();
            lbl.Text = FieldValueString;
            lbl.Font.Bold = true;
            lbl.ForeColor = System.Drawing.Color.Red;
            Controls.Add(lbl);
        }

    }

}

1
投票

我在 Brad Wilson 的博客这里阅读了他的 ASP.NET MVC 2 模板系列。 它比我更能解释你的问题。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.