【问题标题】:dropdown selected value wrong when the values are loaded through jquery通过jquery加载值时下拉选择的值错误
【发布时间】:2014-07-02 17:19:06
【问题描述】:

我有 2 个下拉菜单,ddlYear 和 ddlMonth。两个下拉菜单都在页面加载期间在 ASP.Net C# 中加载了值。 (年份是从 7 月到 6 月开始的财政年度。对于 2014-2015 我只需要显示 7 月。对于 2013-2014,月份列表是 7 月到 6 月) 当年份改变时,我在客户端使用 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);
}

我无法弄清楚这里的错误是什么......

【问题讨论】:

  • I am not able to figure out what is the mistake here. 我们也不能没有您的 asp.net 代码。显示您的页面加载并显示您访问 ddlMonth.SelectedValue 的位置。
  • 添加了asp.net代码
  • @rkatta 分享您的.aspx 代码,它可能会有所帮助...!!

标签: javascript jquery asp.net


【解决方案1】:

我认为您最好的选择是使用客户端隐藏字段来存储下拉列表中的选定项目。客户端数据和服务器端数据之间存在断开连接。

选择新月份时使用 jQuery 填充此字段

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

在你后面的代码中你可以引用它:

Month = Int32.Parse(hdnSelectedMonth.Value);

【讨论】:

  • 是的,我的下一个想法是这个。谢谢!
  • 谢谢瑞克。我将其标记为答案。但我仍在寻找是否有人可以帮助我了解造成这种情况的原因。可能是我缺少一些基础知识并想知道。
【解决方案2】:

使用 jquery 更改服务器端控件的内容是一个非常糟糕的主意。服务器端控件中的数据也存储在 ViewState 中,jquery 无法对其进行更新,因此当服务器尝试读取输入并理解它时,您将遇到重大问题。

我建议您在本月使用纯 HTML 控件(不是 runat="server"),并在服务器端使用类似的东西阅读它

var month = Request["Month"];

【讨论】:

  • 谢谢!我会调查的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多