0

2つのドロップダウンリストを含むユーザーコントロールが自分のページ(scriptmanagerタグを含むマスターページにあります)にあります。ddl1(別名CatList)の値は、ddl2(別名CatList2)の内容を決定します。以前は、ddl1が変更されるたびに完全なポストバックを使用してこれを実行していましたが、さまざまな理由から、この場合は部分的なポストバックを実行したいのですが、部分的なポストバックを機能させることができないようです。 。私のコードは、現在のところ、以下のとおりです。

<%@ Control Language="VB" AutoEventWireup="true" Inherits="System.Web.UI.UserControl" ClassName="KnownIssuesCode" %>
<%@ Import namespace="system.data" %>
<%@ Import namespace="system.data.SqlClient" %>
<script runat="server">
Protected Dim ThePage as string
Sub Page_Load()
    If Not Page.IsPostBack Then
      Dim myReader4 As IDataReader = CType(GetProduct.Select(DataSourceSelectArguments.Empty), IDataReader)
        CatList.Items.Clear()
        CatList.DataValueField = "ProductID"
        CatList.DataTextField = "ProductName"
        CatList.DataSource=myReader4
        CatList.DataBind()
        CatList.SelectedValue = "0"
      myReader4.close
      If not isNothing(session("ProductID")) then
        CatList.SelectedValue = session("ProductID")
        ProductID.Text = session("ProductID")
      Else
        ProductID.Text = 0 
      End if
      Dim myReader2 As IDataReader = CType(GetModule.Select(DataSourceSelectArguments.Empty), IDataReader)
        CatList2.Items.Clear()
        CatList2.DataValueField = "ModuleID"
        CatList2.DataTextField = "ModuleName"
        CatList2.DataSource=myReader2
        CatList2.DataBind()
        CatList2.SelectedValue = "0"
      myReader2.close
    End If
End Sub
Sub CatListIndex_Changed(sender As Object, e As EventArgs) 
  ProductID.Text = CatList.SelectedValue
  Dim myReader2 As IDataReader = CType(GetModule.Select(DataSourceSelectArguments.Empty), IDataReader)
    CatList2.Items.Clear()
    CatList2.DataValueField = "ModuleID"
    CatList2.DataTextField = "ModuleName"
    CatList2.DataSource=myReader2
    CatList2.DataBind()
    CatList2.SelectedValue = "0"
  myReader2.close
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  session("ProductID") = CatList.SelectedValue
  session("ModuleID") = CatList2.SelectedValue

  response.redirect("known-issues.aspx")
End Sub
</script>
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="False" runat="server">
<ContentTemplate>
   <div class="block-holder">
    <div class="block-frame">
      <div class="form-block">
        <h1>KNOWN ISSUES</h1>
        <div class="add-search-form">
          <fieldset>
            <div class="container">
              <div class="row">
                <asp:dropdownlist title="PRODUCT" id="CatList" OnSelectedIndexChanged="CatListIndex_Changed" AutoPostback="True" CssClass="size-3" runat="server" />
              </div>
              <div class="row">
                <asp:dropdownlist id="CatList2" title="MODULE"  CssClass="standard" runat="server" />
              </div>
              <asp:Label ID="ProductID" runat="server" visible="false"></asp:Label>
            </div>
            <asp:Button ID="Button1" runat="server" Text="Search" />
          </fieldset>
        </div>
        <span class="add-desc">FIND workarounds AND solutions</span>
      </div>
    </div>
  </div>
  <asp:SqlDataSource ID="GetModule" runat="server" 
      ConnectionString="<%$ ConnectionStrings:XXX %>" 
      SelectCommand="SELECT ModuleID, ModuleName, ModuleSeq from Module where ModuleDeleted = 0 and (ProductID=@ProductID or ProductID=0) order by ModuleName" 
      DataSourceMode="DataReader">
      <SelectParameters>
          <asp:ControlParameter ControlID="ProductID" Name="ProductID" Type="Int32" />
      </SelectParameters>
  </asp:SqlDataSource>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="CatList" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
<asp:SqlDataSource ID="GetProduct" runat="server" 
  ConnectionString="<%$ ConnectionStrings:XXX %>" 
  SelectCommand="SELECT ProductID, ProductName, ProductSeq from Product order by ProductSeq"
  DataSourceMode="DataReader">
</asp:SqlDataSource>

eta:現時点では、部分的なポストバックを実行する代わりに、完全なポストバックを実行しています。

4

3 に答える 3

0

、ChildrenAsTriggers = "False"を削除するChildrenAsTriggers="False"と、UpdatePanelは選択したトリガーでポストバックします。あなたはここでより多くの情報を見つけることができますChildrenAsTriggers

于 2012-10-23T10:35:44.913 に答える
0

交換:

Sub CatListIndex_Changed(sender As Object, e As EventArgs) 

Protected Sub CatListIndex_Changed(sender As Object, e As EventArgs) Handles CatList.SelectedIndexChanged
于 2012-10-23T10:41:13.113 に答える
0

問題は、コードではなくセキュリティの問題であることが判明しました。別のWebサイトでコードをテストしましたが、意図したとおりに機能します。

セキュリティ設定を少しいじった後、ログインせずに.net以外のページにアクセスできないように設定したワイルドカードフィルタリングの問題であることが判明しました。これを削除すると、ajaxの問題が解決しました。少なくともこのサイトでは、フィルタリングはおそらくやり過ぎでした。

于 2012-10-23T14:35:57.337 に答える