Как использовать DataType.Custom в ASP.NET MVC 2? - PullRequest
2 голосов
/ 20 июля 2010

Может кто-нибудь сказать мне, как использовать DataType.Custom в ASP.NET MVC 2?

Ответы [ 3 ]

4 голосов
/ 11 июня 2012

Не используйте DataType.Custom.

Вместо этого используйте [DataType("YourCustomDataTypeHere")] с шаблоном редактора / отображения с именем YourCustomDataTypeHere.

2 голосов
/ 20 июля 2010

Я бы прочитал серию шаблонов ASP.NET MVC 2 Брэда Уилсона в его блоге здесь . Это объясняет, что вы спрашиваете лучше, чем я мог.

Надеюсь, это поможет.

2 голосов
/ 20 июля 2010

Я не использовал его лично, но, глядя на 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);
        }

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...