ConvertEmptyStringToNull =“false”但转换仍然发生

时间:2010-01-31 00:06:58

标签: asp.net data-binding objectdatasource

DetailsView绑定到ObjectDataSource。 Insideview里面的EditItemTemplate是两个TextBox(T1和T2)。 T1映射到String类型的更新参数,而T2映射到DateTime类型的更新参数。

假设两个TextBox都包含一个空字符串,那么当我尝试通过单击DetailsView的Update按钮来更新数据源时,ODS(或者它可能是DetailsView)会自动将T1的空字符串转换为null,而T2的空字符串不会转换为null。我试图通过将T1的更新参数的ConvertEmptyStringToNull属性设置为false来阻止ODS将T1的空字符串转换为null(我还设置了<asp:TemplateField ConvertEmptyStringToNull=”false” …>,但是没有效果。

a)知道为什么T1的空字符串被转换,而T2不是?

b)另外,如何防止转换(BTW - 我意识到我可以将null转换回更新方法中的空字符串)?

感谢名单

1 个答案:

答案 0 :(得分:2)

  

a)知道为什么T1的空字符串得到了   转换,而T2没有?

T2是DateTime,它是一种值类型。值类型不能为null。好吧,除非你使用Nullable type

  

b)另外,我该如何防止   转换(BTW - 我意识到我可以   将null转换回空字符串   内部更新方法)?

编辑:我试图复制上面的问题,但是当我没有在绑定的ConvertEmptyStringToNull="false"中指定<asp:TemplateField>时,我只能复制问题控制 AND <asp:Parameter>的{​​{1}}。如果你离开,那么你将得到一个空字段的空值。在两个位置都定义了<asp:ObjectDataSource>,它不会将空字符串转换为空值。空字符串正确传递。你说过你在两个地方都尝试过,所以我不确定为什么它不适合你。也许您可以向我们展示您的数据源和详细信息视图标记。

据说我认为在您的商务舱中进行下面描述的检查仍然是一个好主意。就像你说过你可以将null转换回空字符串。我就是这样做的:

我有一个帮助类,我们称之为BizObject,它包含这个方法:

ConvertEmptyStringToNull="false"

然后在我的业务类的Insert / Update方法中,我在每个字符串参数上调用ConvertNullToEmptyString:

protected static string ConvertNullToEmptyString(string input)
{
  return (input == null ? "" : input);
}