ObjectDataSource的Update参数能否设置DefaultValue?附ASPX写法疑问
解答
原有代码的问题
你给出的代码无法正常运行,存在两处核心错误:
- 语法错误:属性值内部引号错位,
hidUID_KEY.V"ALUE是非法写法;同时服务端控件属性不能直接使用<%= %>赋值,该标签是响应输出表达式,作用是直接向页面输出内容,不支持服务端控件属性的绑定场景。 - 绑定方式错误:服务端控件属性需要绑定动态值时,应该使用数据绑定表达式
<%# %>。
类型转换说明
你已经给参数指定了Type="Int32",ObjectDataSource控件会自动将传入的字符串值转换为Int32类型,只要隐藏控件hidUID_KEY的Value值是合法的整数格式,无需手动做类型转换。如果需要添加防错逻辑,可以在绑定表达式内完成转换。
修正后的使用方式
方式1:数据绑定表达式写法
你需要在页面加载或者对应数据绑定触发的时机,调用对应ObjectDataSource实例的DataBind()方法触发绑定,参数部分正确写法如下:
<UpdateParameters> <asp:Parameter Name="UID_KEY" Type="Int32" DefaultValue="<%# hidUID_KEY.Value %>" /> </UpdateParameters>
如果需要显式做类型转换避免格式异常,可以写成:
<UpdateParameters> <asp:Parameter Name="UID_KEY" Type="Int32" DefaultValue="<%# Int32.TryParse(hidUID_KEY.Value, out int uid) ? uid : 0 %>" /> </UpdateParameters>
上述转换逻辑中,当hidUID_KEY.Value不是合法整数时,默认赋值为0,你可以根据业务需求修改默认值。
方式2:后台事件赋值(更推荐)
如果不想依赖数据绑定触发赋值,也可以直接在ObjectDataSource的Updating事件中给参数赋值,容错性更高:
protected void YourObjectDataSourceID_Updating(object sender, ObjectDataSourceMethodEventArgs e) { if(Int32.TryParse(hidUID_KEY.Value, out int uid)) { e.InputParameters["UID_KEY"] = uid; } else { // 自定义非法值处理逻辑,比如取消更新、抛出提示等 e.Cancel = true; } }
内容的提问来源于stack exchange,提问作者John D
相关产品推荐
相关产品推荐

