2012-10-23 44 views
0

我有一個用戶控件在我的頁面(這是在包含一個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 ([email protected] 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: 目前,而不是做一個局部回傳它做一個完整的回發。

+0

如果您拿出更新面板,是否回傳單詞? – Razvan

+0

@Razvan:是的。無論是否有更新面板,它都會執行相同的操作。即完整的回發。 – FrustratedWDotNet

回答

0

竟然是一個安全的一個,而不是一個代碼,一個問題的 - 我測試過我的代碼在不同的網站上,並按預期工作。

經過了一些搞亂安全設置後,結果證明是我設置的通配符過濾問題,以防止非.NET網頁被訪問而無需登錄。 ajax的問題​​,至少在這個網站,過濾可能是矯枉過正。

0

刪除ChildrenAsTriggers="False",ChildrenAsTriggers =「False」導致UpdatePanel在選定的觸發器上回發。您可以在這裏找到ChildrenAsTriggers

+0

錯誤 - 爲什麼我需要在CatList2上設置autopostback =「true」? (這就是你的代碼片斷所說的)CatList已經有autopostback =「true」設置。 – FrustratedWDotNet

+0

Err ...對不起..在CatList2和CatList之間混亂... –

+0

我編輯了答案,檢查它... –

0

更多信息替換:

Sub CatListIndex_Changed(sender As Object, e As EventArgs) 

隨着

Protected Sub CatListIndex_Changed(sender As Object, e As EventArgs) Handles CatList.SelectedIndexChanged 
+0

做到了;不幸的是,性能沒有變化。仍在做一個完整的回發。 – FrustratedWDotNet

+0

如果您取出EventName,該怎麼辦? – Razvan

+0

仍然在做一個完整的回發 - 抱歉 – FrustratedWDotNet