我有一个ASP.Net 3.5页面,其中包含一个FormView控件,使用ObjectDataSource绑定到业务对象。
业务对象的一个属性是DateTime类型,我想为这个对象做2路数据绑定,包括DateTime属性。
我使用自定义格式显示DateTime属性,如下所示:
<asp:TextBox ID="TextBoxDate" runat="server" Text='<%# Bind("Date", "{0:d MMM yyyy HHmm}") %>' />
它显示得很好。 问题是当我尝试执行更新时。我得到以下异常:
字符串未被识别为有效的DateTime。
我的ObjectDataSource包含为此属性显式设置的UpdateParameter,但它似乎没有任何区别。
<UpdateParameters>
<asp:Parameter Name="Date" Type="DateTime" />
</UpdateParameters>
我做错了什么?
更新:
事实证明,如果我将我的Bind表达式中的格式字符串更改为
{0:d MMM yyyy HH:mm}
(注意 HH 和 mm 之间的冒号)
...然后双向数据绑定按预期工作。可悲的是,这并不是我想要的。我希望使用没有冒号的24小时时钟,因此我的原始格式字符串。这仍然无效,我很想知道为什么?更好的是,我很想知道如何在框架中解决这个缺点,但仍然会进行声明性数据绑定。
感谢。
答案 0 :(得分:1)
Bind()
方法,实际上提供双向数据绑定,Eval
提供单向数据绑定
在您的方案中,当您向用户显示数据而不是在bind属性中设置日期格式时,您必须在formview databound
事件中修改日期。
通过这种方式,更新字段时不会出现错误。
答案 1 :(得分:1)
您可以覆盖FormView控件的ItemUpdating事件,然后修改该参数的值以确保它的格式正确。这很可能意味着:
过去我必须做一些这样的事情,货币领域人们可能会输入美元符号,如果不加考虑会导致错误。