asp.net – 当DataBind为Nullable DateTimeOffset和field为NULL
我创建了一个简单的CompositeControl并公开了一个Nullable DateTimeOffset属性.
我正在使用控件将控件绑定到SQL Server DateTimeOffset字段 DateTimeOffset='<%# Bind("myDateTimeOffsetField") %>' 当DateTimeOffset字段具有值时,这很有用. 当字段为NULL时,如何停止此错误并将我的属性设置为Nothing? 我以为这将是默认行为! 属性定义是: Public Property DateTimeOffset As DateTimeOffset? 后来评论: 我发现如果我从使用Bind更改为: DateTimeOffset='<%# iif(IsDbNull(Eval("myDateTimeOffsetField")),Nothing,Eval("myDateTimeOffsetField")) %>' 但是我没有将“myDateTimeOffsetField”作为参数传递给FormView.ItemUpdating事件(是的,这是在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 下面是Binding的标记. Control位于FormView的EditItemTemplate中,该FormView绑定到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,否则一切正常,然后我得到异常. 解决方法
我之前从未创建过可绑定控件,但我想提出建议.如何将DateTimeOffset属性设置为Object类型.这样,该属性将接受任何数据类型,包括DBNull.
一旦进入Set代码,检查传递的值是否为DBNull.Value.如果是这样,创建一个新的空DataTimeOffset?对象并将其保存在ViewState中. 如果为非DBNull值,则抛出错误,如果无法将其转换为datetime. 我没有试过这个,所以我不知道这是否有效. ################更新答案################ 我的建议是,你创建了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 所以在你的标记中,绑定将是DbDateTimeOffset属性: DbDateTimeOffset='<%# Bind("myDateTimeOffsetField") %>' 在代码后面,您可以使用其他属性来读取属性而无需强制转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC会话过期
- asp.net – System.Runtime.InteropServices.COMException功
- asp.net-mvc-3 – MVC3 MapRoute,带斜杠的参数
- ASP.NET MVC jQuery自动完成HtmlHelper
- asp.net – .NET 4.5中的样式包和CSS中的图标
- asp.net-mvc – 局部视图中不同模型类型的问题
- asp.net – 如何使用Excel服务器端?
- asp.net-mvc – 填充导航属性的导航属性
- 如何解决.Net中冲突的程序集?
- 在ASP.NET MVC中设置空响应的Content-Type
- ASP.NET CodeFileBaseClass属性与从System.Web.U
- 登录到MVC 5 ASP.NET模板从根文件夹移动时Web应用
- 实体框架 – EF6 DBContext动态连接字符串
- asp.net-mvc-3 – MVC3 AllowHtml属性的问题
- 为什么要使用流畅的验证而不是ASP.NET MVC验证
- ASP.NET Core文件上传与下载实例(多种上传方式)
- asp.net – 在我的网站中添加HttpModule时出现“
- asp.net – 如何在全球范围内更改路线?
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧
- asp.net-mvc – ASP.NET MVC:如何处理View中的N