Quelqu'un peut-il me dire comment utiliser DataType.Custom dans ASP.NET MVC 2?Comment utiliser DataType.Custom dans ASP.NET MVC 2?
Répondre
Je ne l'ai pas utilisé personnellement, mais en regardant le MSDN, il semble être juste une question de réglage DataType = DataType.Custom
et CustomDataType = "String"
. Ensuite, lorsque vous traitez votre modèle, vous devez rechercher DataType.Custom et, s'il est trouvé, effectuer différentes opérations en fonction de la valeur de CustomDataType.
voici l'exemple qu'ils donnent sur le 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);
}
}
}
Je avais lu sur la série ASP.NET MVC 2 Modèle de Brad Wilson sur son blog here. Il explique ce que vous demandez mieux que moi.
Espérons que ça aide.
N'utilisez pas DataType.Custom
.
Utilisez à la place [DataType("YourCustomDataTypeHere")]
avec un éditeur/modèle d'affichage nommé YourCustomDataTypeHere
.
Pour développer un peu la réponse de MushinNoShin, créez un nouveau fichier ici: Views \ Shared \ DisplayTemplates \ YourCustomDataTypeHere.cshtml –