gpt4 book ai didi

asp.net - 当 DataBind 到 Nullable DateTimeOffset 并且字段为 NULL 时,指定的强制转换无效

转载 作者:行者123 更新时间:2023-12-02 21:12:02 26 4
gpt4 key购买 nike

我创建了一个简单的 CompositeControl 并公开了 Nullable DateTimeOffset 属性。我使用

将控件绑定(bind)到 SQL Server DateTimeOffset 字段
DateTimeOffset='<%# Bind("myDateTimeOffsetField") %>'

当 DateTimeOffset 字段具有值时,这非常有效。但是当该字段为 NULL 时,我收到“指定的 Actor 无效”错误。

当字段为 NULL 时,如何停止此错误并将我的属性设置为 Nothing?

我认为这将是默认行为!

属性定义是:

Public Property DateTimeOffset As DateTimeOffset?

稍后评论:

我发现如果我从使用 Bind 更改为:

DateTimeOffset='<%# iif(IsDbNull(Eval("myDateTimeOffsetField")), Nothing, Eval("myDateTimeOffsetField")) %>'

但是我没有在 FormView.ItemUpdating 事件中将“myDateTimeOffsetField”作为参数传递(是的,这是在 FormView 控件中),因为 ASP.NET 假定我没有绑定(bind)回数据库。

实际代码(按请求添加)

这是我尝试绑定(bind)到的复合控件中的属性:

Public Property DateTimeOffset As DateTimeOffset?
Get
Return CType(ViewState("DTO"), DateTimeOffset?)
End Get
Set(value As DateTimeOffset?)
ViewState("DTO") = value
End Set
End Property

这是绑定(bind)的标记。该控件位于 FormView 的 EditItemTemplate 中,该 FormView 绑定(bind)到 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,否则一切都很好,然后我会得到异常。

最佳答案

我以前从未创建过可绑定(bind)控件,但我想提出建议。如何将 DateTimeOffset 属性设置为 Object 类型。这样,该属性将接受任何数据类型,包括 DBNull。

进入Set代码后,检查传递的值是否为DBNull.Value。如果是,创建一个新的空 DataTimeOffset?对象并将其保存在 ViewState 中。

如果非 DBNull 值,则无法转换为日期时间,则抛出错误。

我没有尝试过,所以我不知道这是否有效。

################更新的答案################

我的建议是,您创建 2 个属性,如下所示:

Public Property DateTimeOffset() As DateTimeOffset?
Get
Return DirectCast(ViewState("DTO"), DateTimeOffset?)
End Get
Set(ByVal Value As DateTimeOffset?)
ViewState("DTO") = Value
End Set
End Property

<Bindable(True, BindingDirection.TwoWay)>
Public Property DbDateTimeOffset As Object
Get
Return Me.DateTimeOffset
End Get
Set(value As Object)
If IsDBNull(value) OrElse value Is Nothing Then
Me.DateTimeOffset = New DateTimeOffset?
Else
Me.DateTimeOffset = DirectCast(value, DateTimeOffset?)
End If
End Set
End Property

因此,在您的标记中,绑定(bind)将是到 DbDateTimeOffset 属性:

DbDateTimeOffset='<%# Bind("myDateTimeOffsetField") %>'

在代码隐藏时,您可以使用其他属性来读取该属性,而无需进行强制转换。

关于asp.net - 当 DataBind 到 Nullable DateTimeOffset 并且字段为 NULL 时,指定的强制转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com