2014-07-02 30 views
0

我有2個下拉列表,ddlYear和ddlMonth。在頁面加載期間,這兩個下拉列表都具有在ASP.Net C#中加載的值。 (年份是從7月到6月開始的財政年度,對於2014-2015年,我只需要顯示7月份,2013-2014年的月份列表是7月到6月) 年份更改時,我使用jquery在客戶端。下拉選擇值錯誤當值通過jquery加載

$('#ddlMonth').empty(); 
      $.each(data, function (index2, val) { 
       $('#ddlMonth').append($('<option></option>').val(val.Key).html(val.Value)); 
      }); 

如果我使用jquery $(「#ddlMonth」)。val()訪問選定的值,它顯示正確。但是,如果我從ASP.Net C#ddlMonth.SelectedValue中選擇值,它會給出錯誤的值/初始默認值。 這裏是我的C#代碼

protected void Page_Load(object sender, EventArgs e) 
     { 
     if (!this.IsPostBack) 
      { 
     ddlFiscalYear.Items.Add(new ListItem(fiscalYearStart.ToString() + "-" + (fiscalYearStart + 1).ToString(),  fiscalYearStart.ToString())); 
       ddlFiscalYear.SelectedValue = fiscalYearStart.ToString(); 
     var months = GetMonthsForFiscalYear(fiscalYearStart); 
     foreach (DateTime month in months) 
       { 
        if (month < DateTime.Now) 
        { 
         ddlMonth.Items.Add(new ListItem(month.ToString("MMMM"), month.Month.ToString())); 
        } 
       } 
     string defaultMonth = DateTime.Today.Month.ToString(); 
     ddlMonth.SelectedValue = defaultMonth; 
} 
} 

    protected void btnSave_Click(object sender, EventArgs e) 
     { 
      Month = Int32.Parse(ddlMonth.SelectedValue); 
} 

我無法弄清楚什麼是錯在這裏...

+1

'我無法弄清楚什麼是錯在這裏。 '我們也沒有你的asp.net代碼。顯示您的頁面加載並顯示您訪問ddlMonth.SelectedValue的位置。 –

+0

新增了asp.net代碼 – rkatta

+0

@rkatta分享你的'.aspx'代碼,這可能會有所幫助...... !! – Bhavik

回答

0

我覺得你最好的選擇是使用客戶端的隱藏字段所選擇的項目從存儲下拉。客戶端數據和服務器端數據之間存在斷開。

使用jQuery當一個新的月份選擇

<input id="hdnSelectedMonth" type="hidden" runat="server"> 

,並在後面的代碼,你可以參考它來填充此字段:

Month = Int32.Parse(hdnSelectedMonth.Value); 
+0

是的,我的下一個想法是這樣的。謝謝! – rkatta

+0

如果這適用於您,請將其標記爲接受的答案。謝謝。 –

+0

謝謝瑞克。我將它標記爲答案。但我仍在尋找是否有人能夠幫助我理解這個原因。可能是我缺少一些基礎知識,並希望知道。 – rkatta

0

這是一個非常糟糕的主意,改變的內容一個使用jquery的服務器端控件。服務器端控件中的數據也存儲在ViewState中,並且jquery無法更新它,所以當服務器嘗試讀取輸入並理解它時會遇到重大問題。

我會建議你使用月一個普通的HTML控件(無runat="server"),閱讀它的服務器端的東西,如

var month = Request["Month"]; 
+0

謝謝!我會研究這一點。 – rkatta