谁能告诉我如何在 ASP.NET MVC 2 中使用 DataType.Custom?
请勿使用
DataType.Custom
。
而是将
[DataType("YourCustomDataTypeHere")]
与名为 YourCustomDataTypeHere
的编辑器/显示模板一起使用。
我个人没用过,但是看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);
}
}
}
我在 Brad Wilson 的博客这里阅读了他的 ASP.NET MVC 2 模板系列。 它比我更能解释你的问题。
希望有帮助。