2010-07-20 11 views

Répondre

2

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); 
     } 

    } 

} 
2

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.

4

N'utilisez pas DataType.Custom.

Utilisez à la place [DataType("YourCustomDataTypeHere")] avec un éditeur/modèle d'affichage nommé YourCustomDataTypeHere.

+1

Pour développer un peu la réponse de MushinNoShin, créez un nouveau fichier ici: Views \ Shared \ DisplayTemplates \ YourCustomDataTypeHere.cshtml –