绑定DropDownList,AppendDataBoundItems不返回Null

时间:2013-04-28 08:38:14

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

我有这个:

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

我得到了国家的下拉和---选择一个---作为正确的第一项。一切都正常工作除了我将一个国家的记录更改为---选择一个---(所以没有国家)并按保存。

然后抛出:

  

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

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

所以在我看来,C#代码不会导致Null被发送到DB,而是一个空字符串。

任何人都非常感谢。非常感谢提前。

2 个答案:

答案 0 :(得分:0)

您可以简单地为国家/地区设置默认值(例如美国)。 或者,对于没有被用户选择的国家/地区,您可以在数据库中使用0之类的值,因此当下拉列表的值为“”时,您可以向数据库发送0以更新表格。

最诚挚的问候。

答案 1 :(得分:0)

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

(TextBox有类似的行为。)

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

因此,对于我上面的问题,当我从char(2)更改为int以获取国家/地区代码时,它就解决了。 Null没有违反外键约束,而“”没有。