代码之家  ›  专栏  ›  技术社区  ›  Slauma

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

  •  1
  • Slauma  · 技术社区  · 16 年前

    <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。所以这个文本框的内容是我的SelectMethod的一个参数。但是页面上有一个特殊的按钮:当单击此按钮并发生回发时,我不希望数据源提取文本框的内容来控制选择,而是希望设置一个特定的硬值“x”作为选择参数。

    我该怎么做?当点击这个特定的按钮时,我能以某种方式“禁用”控制参数并设置我的特殊值吗?还是有别的办法?

    感谢您提前反馈!

    1 回复  |  直到 16 年前
        1
  •  1
  •   Slauma    16 年前

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

    我换了新的 asp:ControlParameter 通过“通用”参数:

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

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

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

    在按文本框内容运行选择的按钮的事件处理程序中:

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

    我不知道这是不是一个好的解决方案,也不知道它是否会有明显的副作用。但目前它是有效的(我想知道“泛型”参数的用途是什么。也许正是这样:“Unbound”参数只能由代码隐藏来设置(除了作为自定义参数类的基类之外)。