如何在使用ASP创建网站时自动生成guid.. NET动态数据



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

我尝试在SQL表中添加"newID()",但它仍然失败。我认为我需要在代码中做一些改变。我相信这可能是许多使用ASP的开发人员所面临的问题。网络动态站点..知道怎么解决这个问题吗?

我想我作弊了,但我刚刚创建了一个新的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;
            }
        }
    }
}

我在~PageTemplatesInsert.aspx中的FormView控件的"插入"事件中添加了以下代码。

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

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

相关内容

  • 没有找到相关文章

最新更新