2012-02-15 43 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; }