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转换回更新方法中的空字符串)?
感谢名单
答案 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);
}