【发布时间】:2010-07-20 17:29:36
【问题描述】:
谁能告诉我如何在 ASP.NET MVC 2 中使用 DataType.Custom?
【问题讨论】:
标签: asp.net-mvc-2 data-annotations types
谁能告诉我如何在 ASP.NET MVC 2 中使用 DataType.Custom?
【问题讨论】:
标签: asp.net-mvc-2 data-annotations types
不要使用DataType.Custom。
将[DataType("YourCustomDataTypeHere")] 与名为YourCustomDataTypeHere 的编辑器/显示模板一起使用。
【讨论】:
我在他的博客here 上阅读了 Brad Wilson 的 ASP.NET MVC 2 模板系列。它比我更好地解释了您的要求。
希望对您有所帮助。
【讨论】:
我个人没用过,但是看MSDN好像只是设置DataType = DataType.Custom和CustomDataType = "String"的问题。然后,当您处理您的模型时,您将检查 DataType.Custom,如果发现则根据 CustomDataType 中的值执行不同的操作。
这是他们在MSDN - How to: Customize Data Field Appearance and Behavior For Non-Intrinsic Data Types in the Data Model 上提供的示例:
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);
}
}
}
【讨论】: