【问题标题】:How to generate GUIDs automatically while creating a site using ASP.NET Dynamic Data?如何在使用 ASP.NET 动态数据创建站点时自动生成 GUID?
【发布时间】:2013-04-11 09:38:00
【问题描述】:

我有一个 SQL Server 数据库,它有很多表。 每个表都有一个主列,实际上是一个 GUID 列。 我创建了新的 ASP.NET 动态数据站点来管理这些表。问题是,没有生成 GUID,这就是网站中断所有表格的原因。

我尝试在 SQL 表中添加“newID()”,但仍然失败。 我相信我需要以某种方式对代码进行更改。我相信这可能是许多使用 ASP.Net 动态站点的开发人员所面临的问题。知道如何解决这个问题吗?

【问题讨论】:

    标签: guid asp.net-dynamic-data


    【解决方案1】:

    我认为我作弊了,但我刚刚创建了一个新的 GUID 字段模板。 使用为您的类创建扩展元数据。此处显示的缩短版本。并将其与您的班级相关联。

    然后将 GUID.ascx 和 GUID_Edit.ascx 添加到您的项目中。当您插入新记录时,将生成一个 GUID,并以只读方式显示在您的表单中。关键是使 UIHint 成为 GUID 类型。

    代码如下...

    --- EventCalendarMetadata.cs

    namespace DFEventsWeb
    {
        [MetadataType( typeof ( EventCalendar_Metadata ) )  ]
        public partial class EVENT_CALENDAR
        {
            [DisplayName("EVENTS")]
            private abstract class EventCalendar_Metadata
            {
                [Display(Name = "ID")]
                [UIHint("GUID")]
                public object EVENT_ID { get; set; }
    
    .... other fields removed ...
            }
        }
    }
    

    --- GUID.ascx

    <%@ Control Language="C#" CodeBehind="GUID.ascx.cs" Inherits="DFEventsWeb.GUID" %>
    <asp:Literal runat="server" ID="Literal1" Text="<%# FieldValueString %>" />
    

    --- GUID.ascx.cs 命名空间 DFEventsWeb {

        public partial class GUID : System.Web.DynamicData.FieldTemplateUserControl
        {
            private const int MAX_DISPLAYLENGTH_IN_LIST = 100;
    
            public override string FieldValueString
            {
                get
                {
                    string value = base.FieldValueString;
                    if (ContainerType == ContainerType.List)
                    {
                        if (value != null && value.Length > MAX_DISPLAYLENGTH_IN_LIST)
                        {
                            value = value.Substring(0, MAX_DISPLAYLENGTH_IN_LIST - 3) + "...";
                        }
                    }
                    return value;
                }
            }
    
            public override Control DataControl
            {
                get
                {
                    return Literal1;
                }
            }
        }
    }
    

    --- GUID_Edit.ascx

    <%@ Control Language="C#" CodeBehind="GUID_Edit.ascx.cs" Inherits="DFEventsWeb.GUID_EditField" %>
    <asp:Literal ID="Literal1" runat="server" Text='<%# OVERRIDE_GUID %>'></asp:Literal>
    

    --- GUID_Edit.ascx.cs

    namespace DFEventsWeb
    {
        public partial class GUID_EditField : System.Web.DynamicData.FieldTemplateUserControl
        {
            const int MAX_TEXT_COLUMN_SIZE = 200; // jeh
    
            string m_GUIDString;
            public string OVERRIDE_GUID 
            {
                get { return m_GUIDString; }
                set { m_GUIDString = value; }
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
            }
    
            protected override void OnDataBinding(EventArgs e)
            {
                base.OnDataBinding(e);
                OVERRIDE_GUID = ( FieldValueEditString.Length <= 0 ? System.Guid.NewGuid().ToString() : FieldValueEditString );
            }
    
            protected override void ExtractValues(IOrderedDictionary dictionary)
            {
                dictionary[Column.Name] = ConvertEditedValue(Literal1.Text);
            }
    
            public override Control DataControl
            {
                get
                {
                    return Literal1;
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我在 ~PageTemplates\Insert.aspx 的 FormView 控件的“插入”事件中添加了以下代码。

      e.Values.Add("Id", Guid.NewGuid());
      

      由于我所有的表都有一致的命名约定,因为 Id 代表 PK 列,我可以使用这个硬编码的列名,否则,您可能需要编写适当的逻辑来查找 PK 列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-16
        • 2021-02-16
        • 2016-01-15
        • 2012-06-25
        • 2012-06-07
        • 2021-04-05
        • 1970-01-01
        • 2011-08-15
        相关资源
        最近更新 更多