【问题标题】:Bound DropDownList with AppendDataBoundItems not returning Null绑定 DropDownList 与 AppendDataBoundItems 不返回 Null
【发布时间】:2013-04-28 08:38:13
【问题描述】:

我有这个:

<asp:DropDownList ID="HomeCountry" runat="server" 
    DataSourceID="CountryListEntityDS" 
    DataTextField="CountryNameEn" 
    DataValueField="CountryCode" 
    AppendDataBoundItems="True"                          
    SelectedValue="<%# Bind('HomeCountry') %>">                                              
    <asp:ListItem Text="--Select One--" Value="" />
</asp:DropDownList>

数据源是这样的:

<asp:EntityDataSource ID="CountryListEntityDS" runat="server" 
        ConnectionString="name=MainDataModelEntityCont" 
        DefaultContainerName="MainDataModelEntityCont" 
        EnableFlattening="False" 
        EntitySetName="Countries">
</asp:EntityDataSource>

我得到了国家和地区的下拉菜单,并且 --- Select One --- 作为第一项正确。一切正常,除非我将具有国家/地区的记录更改为 --- 选择一个 ---(因此没有国家)并按保存。

然后它抛出:

[SqlException (0x80131904): UPDATE 语句与 FOREIGN KEY 约束“FK_Account_CountryList”。

我已在 SQL Server Management Studio 中手动重现此错误,如果我尝试将记录的 Country 字段从有效值更改为“”,则会发生此错误。抛出相同的错误。但是当我把 Null 它工作正常。 DB 约束基本上是说您必须具有有效值或 Null。

所以在我看来,C# 代码并没有导致将 Null 发送到 DB,而是一个空白字符串。

非常感谢任何人的帮助。非常感谢。

【问题讨论】:

  • 你的sql查询有问题。查看查询和表字段,特别是外键

标签: c# asp.net data-binding drop-down-menu entitydatasource


【解决方案1】:

您可以简单地为国家/地区(例如美国)设置一个默认值。 或者对于用户未选择的国家/地区,您可以在 DB 中使用类似 0 的值,因此当下拉列表的值为“”时,您可以将 0 发送到 DB 以更新表。

最好的问候。

【讨论】:

    【解决方案2】:

    SQL 表的数据类型有所不同。

    (TextBox 有类似的行为。)

    似乎规则是,当服务器控件绑定到可以接受空白字符串(即:“”)的数据库字段时,它会在保存时将其返回给 db。但是当它绑定到不能绑定的类型时,它会返回 Null。

    因此,对于我上面的问题,当我将国家代码从 char(2) 更改为 int 时,问题就解决了。 Null 没有违反外键约束,而 "" 违反了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2014-05-29
      • 2020-08-24
      • 2011-09-25
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多