ObjectDataSource.Select()并不总是在页面回发上触发

时间:2012-05-15 01:16:55

标签: asp.net vb.net objectdatasource

我有一张表格:

  • 1个文本框(“MyTextBox”)
  • 3个复选框(“MyCheckBox1”,“MyCheckBox2”,“MyCheckBox3”)
  • 1提交按钮(“MySubmitButton”)
  • 1 ObjectDataSource(“MyObjectDataSource”)
  • 1 GridView(“MyGridView”)

我的ObjectDataSource如下所示:

<asp:ObjectDataSource ID="MyObjectDataSource" runat="server"
                          SelectMethod="MySelectMethod"
                          TypeName="MyTypeName">
    <SelectParameters>
        <asp:ControlParameter Name="MyRegularString"
                              Type="String"
                              ControlID="MyTextBox"
                              PropertyName="Text" />

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

第二个参数(“MySpecialString”)填充如下:

Protected Sub MyObjectDataSource_Selecting(...) Handles MyObjectDataSource.Selecting

   Dim MySpecialString As String = "Key1=" & MyCheckBox1.Checked.ToString & ";" & _
                                   "Key2=" & MyCheckBox2.Checked.ToString & ";" & _
                                   "Key3=" & MyCheckBox3.Checked.ToString & ";"

   e.InputParameters.Item("MySpecialString") = MySpecialString

End Sub

每当我更改MyTextBox的值并按MySubmitButton时,都会调用MyObjectDataSource的select方法,一切正常。

但是,如果我更改任何复选框的值(不更改MyTextBox的值)并按MySubmitButton,则不会调用select方法,因此不会发生“MyObjectDataSource_Selecting”事件并且我得到相同的结果和以前一样。

我发现解决此问题的一种方法是在单击MySubmitButton时显式调用MyGridView.DataBind方法。这是处理这些类型参数的最佳方法吗?我担心的是,这可能导致select方法被调用两次,使页面变慢。

提前感谢您的帮助。

CD

1 个答案:

答案 0 :(得分:0)

这就是我最终要做的事情。

  1. 用asp:Parameters替换所有asp:ControlParameters。
  2. 每次单击MySubmitButton时,都会显式调用MyGridView.DataBind方法。
  3. 我检查过,并且在执行此操作时不会调用select方法两次。