2011-04-11 123 views
1

我有兩個dropdowlists ddprojecttype和ddprojectname。在選擇項目類型時,我使用jQuery和AJAX將項目名填入ddprojectname。它只顯示正確。下拉選定的值沒有被選中,它總是顯示第一個值在選擇

但是,每當我嘗試在下拉列表中進行選擇時,它總是選擇第一項。而且它的行爲是特殊的:當我在瀏覽器中查看aspx頁面時,它將所有項目名稱顯示在下拉列表中。而在查看源代碼的情況下,它根本沒有顯示下拉選項。

我會後的頁面代碼,以及用於將HTML和jQery腳本他們:

<asp:DropDownList ID="ddProjectTypeID" runat="server" > 
        </asp:DropDownList> 
<asp:DropDownList ID="ddProjectName" runat="server" > 
        </asp:DropDownList> 

jQuery的爲它成功地加載項目名稱的腳本是:

$('[id*="ddProjectTypeID"]').change(function() { 
    if ($(this).find(":selected").text() != "--Select--") { 
     $.ajax({ 
      type: 'POST', 
      contentType: "application/json; charset=utf-8", 
      url: 'Services/Service.asmx/GetProjectNames', 
      data: '{"p_type_id":"' + $(this).find(":selected").val() + '"}', 
      dataType: "json", 
      success: function(data, textStatus) { 
       if (textStatus == "success") { 
        var myObject = data.d; 
        $('[id*="ddProjectName"] >option').remove(); 
        $('[id*="ddProjectName"]').append($('<option></option>').val("--Select--").html("--Select--")); 
        for (var i = 0; i <= myObject.length - 1; i++) { 
         $('[id*="ddProjectName"]').append($('<option></option>').val(myObject[i].project_id) 
             .html(myObject[i].project_name)); 
        } 
       } 
      }, 
      error: function(data, textStatus) { 
       alert('An error has occured retrieving data!'); 
      } 
     }); 
    } 
}); 

它將名稱成功加載到ddprojectnames下拉列表中:

奇怪的是,每當我執行此代碼時:

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
    ScheduleDetails scdetails = new ScheduleDetails(); 
    scdetails.ProjectTypeID = ddProjectTypeID.SelectedItem.Value; 
      scdetails.ProjectID = ddProjectName.SelectedItem.Value; 


} 

它只是變得scdetails.ProjectTypeID = 1,但 scdetails.ProjectID = 「 - 選擇 - 」

我沒有得到的原因所在。儘管我已經從projecttypeID的級聯下拉列表中加載了項目名稱,但是,無論我選擇ddprojectname的任何值,它都會得到「--select--」...

爲什麼會發生這種情況?

+0

只是一個預感 - 註釋填充'---- select ---'選項的行。現在選定的價值是多少? – 2011-04-11 11:40:46

回答

0

我的猜測是,因爲ddDropDownName的列表項取決於ID下拉列表的選擇,所以選中的值無法在客戶端生命週期中設置,因爲可用數據尚不存在。

嘗試在頁面的PreRender階段設置事件並檢查下拉列表中的選定值。如果它設置正確,那麼告訴我,將這個值加載到ViewState的下拉列表中是一個問題。

+0

@maple lemme在幾分鐘內檢查出來。它真的很麻煩。儘管這不應該讓人喜歡...導致下拉列表的流程如下所示: 1.選擇項目類型ID 2.項目類型ID發送到Webservice: 3. Webservice通過ajax填充ddprojectnames。 4.下拉菜單顯示所有具有projectTypeId ='1'的名稱 5.我嘗試選擇ProjectID 6.現在,我單擊按鈕,將項目ID分配給scdetails.ProjectID = ddProjectName.SelectedItem.Value – Joy 2011-04-11 11:55:24

+0

也許你應該嘗試在你走路前爬行。很顯然,回發後ViewState在服務器端沒有正確更新。要創建最簡單的場景,您應該從更新面板中調用回發的服務器端事件填充ddProjectName下拉列表。您應該能夠將javascript ajax調用中的業務邏輯移至服務器端事件,然後查看填充ViewState是否有所幫助。如果是這樣的話,那麼問題就出現在你的javascript ajax調用中。 – 2011-04-11 12:17:30

+0

@maple是的,我很同意這一點。我已經成功地通過從服務器端事件做到了這一點。我想你知道我們爲什麼不使用ajax更新面板..因爲它的視圖狀態很重。即使我知道由於客戶端交互的可能性,視圖狀態不會從jquery ajax調用中填充。這就是爲什麼我試圖找出上述事件發生的原因。因爲我無能爲力,爲什麼它不會發生從塞雷爾事件引起的完全正常的邏輯我描述和情景我實現:) – Joy 2011-04-11 13:22:52

0

你試試:

$("#<%=ddProjectTypeID.ClientID %>") instead of $('[id*="ddProjectTypeID"]') 

的DrpDwnList的ID可能會在客戶端,如果您使用的是母版頁或某事而改變。

+0

選擇器$('[id * =「ddProjectTypeID」]')正在工作罰款。我不能使用該caz它的外部Js文件。儘管它不應該做太多diffrence.cause我已經看到ddprojectnames填充在頁面中,但html源代碼顯示爲: