1

我有一个 ASP.Net 3.5 页面,其中包含一个 FormView 控件,使用 ObjectDataSource 绑定到一个业务对象。

业务对象的属性之一是 DateTime 类型,我想为此对象进行 2 路数据绑定,包括 DateTime 属性。

我使用自定义格式来显示 DateTime 属性,如下所示:

<asp:TextBox ID="TextBoxDate" runat="server" Text='<%# Bind("Date", "{0:d MMM yyyy HHmm}") %>' />

它显示得很好。问题是当我尝试执行更新时。我得到以下异常:

字符串未被识别为有效的日期时间。

我的 ObjectDataSource 包含为此属性明确设置的 UpdateParameter,但它似乎没有任何区别。

    <UpdateParameters>
        <asp:Parameter Name="Date" Type="DateTime" />
    </UpdateParameters>

我究竟做错了什么?

更新:

事实证明,如果我将 Bind 表达式中的格式字符串更改为

{0:d MMM yyyy HH:mm}

(注意HHmm之间的冒号)

...然后两种方式的数据绑定按预期工作。可悲的是,这并不是我想要的。我希望使用没有冒号的 24 小时制,因此是我的原始格式字符串。这仍然不起作用,我很想知道为什么?更好的是,我很想知道如何解决框架中的这个缺点,但仍然进行声明性数据绑定。

谢谢。

4

2 回答 2

1

您可以覆盖 FormView 控件的 ItemUpdating 事件,然后修改该参数的值以确保其格式正确。这很可能意味着:

  1. 从 e.NewValues("Date") 获取值
  2. 将字符串值解析为 DateTime 对象
  3. 将值分配回 e.NewValues("Date")

过去,我不得不在货币字段中做类似的事情,人们可能会在其中输入一个美元符号,如果不理会它会导致错误。

于 2009-08-02T06:39:09.087 回答
1

Bind()方法,实际上提供了两种方式的数据绑定和Eval提供一种方式的数据绑定

databound在您的场景中,当您向用户显示数据而不是在绑定属性中设置日期格式时,您必须在 formview 事件中修改日期。

这样,您在更新字段时不会出错。

于 2009-08-02T03:32:51.757 回答