我创建了一个简单的 CompositeControl 并公开了一个 Nullable DateTimeOffset 属性。我正在使用将控件绑定到 SQL Server DateTimeOffset 字段
DateTimeOffset='<%# Bind("myDateTimeOffsetField") %>'
当 DateTimeOffset 字段有值时,这很有效。但是当该字段为 NULL 时,我会收到“指定的转换无效”错误。
当字段为 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 DataSource,返回一个名为 [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,否则一切正常,然后我得到异常。