覆盖代码隐藏中数据源的控制参数

时间:2010-03-08 19:53:55

标签: asp.net datasource objectdatasource

我有一个ObjectDataSource(但是对于支持参数集合的所有类型的DataSource,这个问题可能都是一样的):

<asp:ObjectDataSource ID="MyObjectDataSource" runat="server" 
    TypeName="MyData"
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="GetMyData" >
    <SelectParameters>
        <asp:ControlParameter ControlID="MyTextBox" Name="MyParameter" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

正如您所看到的,在aspx页面上有一个ControlParameter绑定到TextBox。因此,此TextBox的内容是我的SelectMethod的参数。但页面上有一个特殊按钮:当单击此按钮并发生回发时,我不希望DataSource提取TextBox的内容来控制选择,而是我想设置特定的硬值“x”作为选择参数。

我该怎么做?当单击此特定按钮并设置我的特殊值时,我可以以某种方式“禁用”ControlParameter吗?或者还有其他方法吗?

提前感谢您的反馈!

1 个答案:

答案 0 :(得分:1)

我自己找到了这个解决方案:

我已将asp:ControlParameter替换为“通用”参数:

<SelectParameters>
    <asp:Parameter Name="MyParameter" Type="String" />
</SelectParameters>

...然后在特殊按钮的事件处理程序中:

MyObjectDataSource.SelectParameters["MyParameter"].DefaultValue = "x";

在按钮的事件处理程序中,它将运行TextBox内容的选择:

MyObjectDataSource.SelectParameters["MyParameter"].DefaultValue = MyTextBox.Text;

我不知道这是否是一个好的解决方案,或者它是否会产生不希望的副作用。但目前它的工作原理。 (无论如何,我想知道“泛型”参数的用途是什么。也许正是这样:“仅从代码隐藏设置的”未绑定“参数(除了作为自定义参数类的基类)。