【发布时间】:2024-05-18 16:25:02
【问题描述】:
我创建了一个简单的 CompositeControl 并公开了一个 Nullable DateTimeOffset 属性。 我正在使用
将控件绑定到 SQL Server DateTimeOffset 字段DateTimeOffset='<%# Bind("myDateTimeOffsetField") %>'
当 DateTimeOffset 字段有值时,这很有效。 但是当该字段为 NULL 时,我会收到“Specified Cast is not valid”错误。
当字段为 NULL 时,如何停止此错误并将我的属性设置为 Nothing?
我认为这将是默认行为!
属性定义为:
Public Property DateTimeOffset As DateTimeOffset?
稍后评论:
我发现如果我从使用 Bind 更改为:
DateTimeOffset='<%# iif(IsDbNull(Eval("myDateTimeOffsetField")), Nothing, Eval("myDateTimeOffsetField")) %>'
但是我没有在 FormView.ItemUpdating 事件中将“myDateTimeOffsetField”作为参数传递(是的,这是在 FormView 控件中),因为 ASP.NET 假定我没有绑定回数据库。
实际代码(按要求添加)
这是我尝试绑定到的复合控件中的属性:
Public Property DateTimeOffset As DateTimeOffset?
Get
Return CType(ViewState("DTO"), DateTimeOffset?)
End Get
Set(value As DateTimeOffset?)
ViewState("DTO") = value
End Set
End Property
这是绑定的标记。控件位于 FormView 的 EditItemTemplate 中,它绑定到 SQL 数据源,返回一个名为 [dtoMldRejOn] 的字段,其中包含可选的 DateTimeOffset 值。
<APS:DateTimeOffsetControl runat="server" id="dtocMldRejOn" TextBoxCssClass="inputdatetime" ValidationGroup="vw1" FieldName="<%$ Resources: Resource, rxgFrom %>" DateTimeOffset='<%# Bind("dtoMldRejOn") %>' WindowsTimeZoneID="<%# me.WindowsTimeZoneID %>" IsRequired="false" />
如您所见,我的 Composite 控件用于处理 DateTimeOffset 值。除非数据库中的 DateTimeOffset 字段 [dtoMldRejOn] 为 NULL,否则一切正常,然后我得到异常。
【问题讨论】:
-
可能是一个愚蠢的问题,但是如果你尝试
DateTimeOffset=Nothing,你会得到同样的错误吗? -
不,我可以毫无问题地将其设置为 Nothing。
标签: asp.net vb.net data-binding nullable datetimeoffset