【问题标题】:Overwriting ControlParameters of DataSources in code-behind在代码隐藏中覆盖数据源的控制参数
【发布时间】:2010-03-08 19:53:54
【问题描述】:

我有一个 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>

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

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

提前感谢您的反馈!

【问题讨论】:

    标签: asp.net datasource objectdatasource


    【解决方案1】:

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

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

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

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

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

    在通过 TextBox 内容运行选择的按钮的事件处理程序中:

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

    我不知道这是否是一个好的解决方案,或者它是否会产生意想不到的副作用。但目前它有效。 (无论如何,我想知道“通用”参数的目的是什么。也许正是这个:“未绑定”参数只能由代码隐藏设置(除了作为自定义参数类的基类)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 2013-10-29
      • 2015-03-08
      • 2023-02-10
      • 1970-01-01
      • 2019-06-13
      • 2021-12-13
      • 2016-02-02
      相关资源
      最近更新 更多