1

我有一个 asp.net 页面:

  • 更新面板
  • 对象数据源
  • 一个网格视图

更新面板如下所示:

<asp:UpdatePanel ID="MyUpdatePanel" runat="server">
    <ContentTemplate>

         <asp:DropDownList ID="MyDropDownList" runat="server"
                           AutoPostBack="True">
             ...
         </asp:DropDownList>

         <asp:TextBox ID="MyTextBox" runat="server" />

         <asp:Button ID="MySubmitButton" runat="server" text="Submit" />

    </ContentTemplate>
</asp:UpdatePanel>

当用户在下拉列表中选择一个选项时,文本框会发生某些事情,它可能被启用或禁用,或者它可能被填充或清空(取决于所选选项)。此更改不应影响页面的其余部分(这就是我将其放在 UpdatePanel 中的原因)。

现在,在更新面板之外,我有了页面的其余部分。像这样:

<asp:ObjectDataSource ID="MyObjectDataSource" runat="server"
                          SelectMethod="MySelect" 
                          TypeName="MyType">
    <SelectParameters>
        <asp:ControlParameter Name="Parameter1" Type="String" ControlID="MyDropDownList" PropertyName="SelectedValue" />
        <asp:ControlParameter Name="Parameter2" Type="String" ControlID="MyTextBox" PropertyName="Text" />
    </SelectParameters>
</asp:ObjectDataSource>

<asp:GridView ID="MyGridView" runat="server" 
                  AutoGenerateColumns="False" 
                  DataKeyNames="MY_ID"
                  DataSourceID="MyObjectDataSource">
        <Columns>
            ....
        </Columns>
</asp:GridView>

同样,ObjectDataSource 和 GridView 位于 UpdatePanel 之外。

但是每当我在下拉列表中选择一个选项时,就会调用 MyObjectDataSource 的 SelectMethod!

我做错了什么?

在此先感谢您的帮助。

更新:

我尝试将 MyObjectDataSource 和 MyGridView 放置在单独的更新面板中,但页面窗台具有相同的行为:-(

4

1 回答 1

1

我找到了解决方案。

  1. 将 asp:ControlParameters 替换为 asp:Parameters。
  2. 在 MySubmitButton.Click() 事件中添加了对 MyGridView.DataBind 的调用。
  3. 为 MyObjectDataSource.Selecting() 事件中的参数赋值。

现在 MyObjectDataSource 的 SelectedMethod 仅在用户单击 MySubmitButton 时才被调用。

:-)

于 2012-05-16T23:39:26.020 回答