2013-04-28 131 views
0

我有這樣的:綁定的DropDownList與AppendDataBoundItems不返回NULL

<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字段從有效值更改爲「」,則會發生此錯誤。拋出同樣的錯誤。但是,當我把它的工作正常。數據庫約束基本上是說你必須有一個有效值或空值。

所以在我看來,C#代碼在某種程度上不會導致將空值發送到數據庫,而是一個空白字符串。

任何人都非常感謝。提前謝謝了。

+0

您的sql查詢存在問題。看看查詢和表字段,特別是外鍵 – polin 2013-04-28 08:40:49

回答

0

您可以簡單地爲國家(例如美國)設置默認值。 或者對於沒有被用戶選擇的國家/地區,您可以在數據庫中使用類似於0的值,因此當下拉列表的值爲「」時,您可以將0發送到數據庫以更新表格。

問候。

+0

感謝您的答案,這是一個實用的解決方法。 – user2328625 2013-04-29 11:55:50

0

SQL表上的數據類型有所不同。

(文本框也有類似的行爲。)

看來規則是,當服務器控件綁定到一個數據庫字段,可以接受一個空字符串(即:「」),它返回到數據庫,上保存。但是當它綁定到一個不能的類型時,它返回Null。

因此,對於我上面的問題,它解決了當我從國家代碼從char(2)更改爲int。 Null沒有違反外鍵約束,而「」沒有。