2012-02-15 48 views
0

我有一個標準的ASP.NET 4動態數據站點(使用Linq to SQL)。在asp.net中防止空字符串變爲空dynamic-data

在我的SQL服務器數據庫中,我有數百個設置爲NOT NULL的varchar字段,但具有空字符串的默認值。它們不應該是NULL,但它們可能有一個空字符串作爲內容。

在動態數據站點上編輯這些字段時,內部邏輯將該字段視爲NOT NULL,並在TextBox1.Text(它是一個空字符串)之間的某個位置,並調用UPDATE sql將值設置爲NULL,失敗。

我可以看到System.Web.DynamicData.MetaColumn有一個屬性'ConvertEmptyStringToNull',但是是隻讀的。

我能做些什麼來防止空字符串變爲NULL而不必更改所有數百個字段的屬性?

回答

0

FieldTemplates/Text_Edit.ascx.cs改變字符串的行爲,首先刪除 驗證器,因爲它們阻止提交表單:

protected void Page_Load(object sender, EventArgs e) { 
    TextBox1.MaxLength = Column.MaxLength; 
    if (Column.MaxLength < 20) 
     TextBox1.Columns = Column.MaxLength; 
    TextBox1.ToolTip = Column.Description; 

    if (Column.IsString) 
    { 
     this.Controls.Remove(RequiredFieldValidator1); 
     this.Controls.Remove(RegularExpressionValidator1); 
     this.Controls.Remove(DynamicValidator1); 
    } 
    else 
    { 
     SetUpValidator(RequiredFieldValidator1); 
     SetUpValidator(RegularExpressionValidator1); 
     SetUpValidator(DynamicValidator1); 
    } 
} 

的一段代碼,其將空字符串爲NULL是在ConvertEditedValue方法的地方,所以跳過這個字符串:

protected override void ExtractValues(IOrderedDictionary dictionary) 
{ 
    if (Column.IsString) 
    { 
     dictionary[Column.Name] = TextBox1.Text; 
    } 
    else 
    { 
     dictionary[Column.Name] = ConvertEditedValue(TextBox1.Text); 
    } 
} 

現在,您可以更新與空字符串表,當然,現在的問題是你ç所有varchar字段的一組空字符串不僅具有默認值。

我沒有看到Linq to SQL或EF數據模型中的任何地方,我可以找到有關我的SQL Server默認值的信息。有一個屬性DefaultValue,但它始終爲NULL。

0

你有調用數據庫的單一過程嗎?
如果是這樣,您可以在此處檢查字段值,或者僅爲每個值附加一個空白字符串。

+0

的動態網站使用它自己生成的SQL,所以我沒有任何控制權,或者我呢? – 2012-02-15 11:26:53

+0

對不起 - LINQ2SQL - 我無法幫到那裏!我應該更仔細地閱讀這個問題:( – CompanyDroneFromSector7G 2012-02-15 11:32:38

0

既然你想在數據庫中設置默認值(空字符串),而不是在應用程序中可以考慮使用有問題的列的元數據默認保存到數據庫的初始化:

[Column(IsDbGenerated = true, UpdateCheck = UpdateCheck.Never, AutoSync=AutoSync.Never)] 
public object MyColumn { get; set; }