带动态数据的MVC 3 - 将数据类型应用于动态数据

时间:2011-04-20 10:18:13

标签: asp.net-mvc-3 types dynamic-data

我有一个MVC 3 C#/ ADO.NET /动态数据应用程序设置和工作(ish)。为了进行设置,我创建了一个MVC 3应用程序,添加了动态数据组件,将Presentation,Business和Data拆分为三个项目,设置引用以匹配MVC模式并设置路由和脚手架。

使用标准DD页面模板列出,编辑和插入所有工作,但是我已经找到了一个墙,让表示层将数据类型属性应用于Gridview和Details视图中显示的数据,特别是URL,我想要的输入为DataType.Url,因此使用关联的DD显示属性。

尝试为Link表设置元数据类并应用类似:

的内容
[DataType(DataType.Url)]
public object URL {get; set;}

(表格“链接”中的网址字段为“网址”)

..在部分类中,这是我读到的纯DD站点。

有人能指出我正确的方向,或者告诉我这是否可能?

非常感谢。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。我会为Urls编写一个自定义FieldTemplate。使用UIHint元数据,您可以为列分配自定义fieldtemplate。像这样(未经测试):

    public partial class FooUrl : System.Web.DynamicData.FieldTemplateUserControl
    {

        string getUrl()
        {
            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)
        {
            HyperLinkUrl.NavigateUrl = getUrl();
        }

        public override Control DataControl
        {
            get
            {
                return HyperLinkUrl;
            }
        }
    }
}

我希望这会有所帮助。