2014-07-02 34 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