【问题标题】:How to use DataType.Custom in ASP.NET MVC 2?如何在 ASP.NET MVC 2 中使用 DataType.Custom?
【发布时间】:2010-07-20 17:29:36
【问题描述】:

谁能告诉我如何在 ASP.NET MVC 2 中使用 DataType.Custom?

【问题讨论】:

    标签: asp.net-mvc-2 data-annotations types


    【解决方案1】:

    不要使用DataType.Custom

    [DataType("YourCustomDataTypeHere")] 与名为YourCustomDataTypeHere 的编辑器/显示模板一起使用。

    【讨论】:

    • 要扩展 MushinNoShin 的答案,请在此处创建一个新文件:Views\Shared\DisplayTemplates\YourCustomDataTypeHere.cshtml
    【解决方案2】:

    我在他的博客here 上阅读了 Brad Wilson 的 ASP.NET MVC 2 模板系列。它比我更好地解释了您的要求。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      我个人没用过,但是看MSDN好像只是设置DataType = DataType.CustomCustomDataType = "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);
              }
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多