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

发布于 2024-11-02 07:53:32 字数 481 浏览 6 评论 0原文

我有一个 MVC 3 C# / ADO.NET / 动态数据应用程序设置并正在运行。为了进行设置,我创建了一个 MVC 3 应用程序,添加了动态数据组件,将演示文稿、业务和数据拆分为三个项目,设置引用以匹配 MVC 模式,并设置路由和脚手架。

列出、编辑和插入所有工作都使用标准 DD 页面模板,但是我在让表示层将数据类型属性应用于 Gridview 和详细信息视图中显示的数据时遇到了困难,特别是对于 URL,我希望将其键入为DataType.Url等使用关联的DD显示属性。

尝试为链接表设置一个元数据类,并应用类似的内容:(

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

表“链接”中的 Url 字段是“URL”)

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

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

非常感谢。

I have an MVC 3 C# / ADO.NET / Dynamic Data app set up and working(ish). To set it up I created an MVC 3 app, added the Dynamic Data components in, split out Presentation, Business and Data in to three projects, set the references to match the MVC pattern and set up the routes and scaffolding.

List, Edit and Insert all work with the standard DD page templates, however I've hit a wall getting the Presentation Layer to apply data type attributes to the data displayed in Gridview and Details views, particularly for URLs, which I want be typed as DataType.Url and so use the associated DD display attributes.

Have tried setting up a meta data class for the Link table and applying something like:

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

(the Url field in table "Link" is "URL")

.. within a partial class, which is something I read about for pure DD sites.

Can anyone point me in the right direction, or tell me if is this even possible?

Many Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

極樂鬼 2024-11-09 07:53:32

是的,这是可能的。我会为 URL 编写一个自定义 FieldTemplate。使用 UIHint 元数据,您可以将自定义字段模板分配给该列。像这样的东西(未经测试):

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

我希望这有帮助。

Yes this is possible. I would write a custom FieldTemplate for Urls. Using the UIHint metadata, you can assign a custom fieldtemplate to the column. Something like this (untested):

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

I hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文