单击按钮时,下拉列表填充Jquery为空

时间:2012-10-22 05:37:41

标签: c# jquery rest postback

我有一个html选择下拉列表,我使用jquery填充数据。我将runat =“server”添加到select中,以便我可以通过编程方式访问它。但是,在提交页面时,下拉列表中没有列表项。这是否有原因。

这是Jquery调用

$(window).load(function () {                
         getListDepartments();  // method call to rest service, and it populates correctly

     }
 );

ASPX

// getDepartmentManagers() populates ddlDeparmentManagers with names using jquery
    <select style="display: block;" id="ddlDepartments" class="eight" runat="server" onchange="getDepartmentManagers()">
    </select>

        <select style="display: block;" id="ddlDeparmentManagers" class="eight" runat="server">
        </select>

C#

protected void lbSearch_Click(object sender, EventArgs e)
{

    grdDepartmentEmployees.DataSource = service.FindListBySearch(ddlDepartments.Value, ddlDeparmentManagers.Value);
    grdDepartmentEmployees.DataBind();
}

我遇到的问题是,当我运行上面的c#方法时,两个下拉列表似乎都是空的。

1 个答案:

答案 0 :(得分:2)

您可以尝试访问下拉列表的值,如下所示:

string department = Page.Request.Form["ddlDepartments"].ToString();
string manager = Page.Request.Form["ddlDeparmentManagers"].ToString();

grdDepartmentEmployees.DataSource = service.FindListBySearch(department, manager);                    
grdDepartmentEmployees.DataBind();

请注意,以这种方式检索值会为您提供所选项目的value - 具体取决于列表的填充方式,此可能与显示的文本不同下降。

如果值和文本不同,而您确实需要所选项目的文本,那么您需要做一些更复杂的事情:

在页面中添加两个隐藏字段(我们将使用这些字段存储选择):

<asp:HiddenField ID="SelectedDepartmentHiddenField" runat="server" />
<asp:HiddenField ID="DepartmentManagerHiddenField" runat="server" />

getDepartmentManagers方法中:

$('#SelectedDepartmentHiddenField').val($('#SelectedDepartmentHiddenField').val());

处理onchange列表的ddlDeparmentManagers事件:

<select style="display: block;" id="ddlDeparmentManagers"
    class="eight" runat="server" onchange="departmentManagerChange()">

function departmentManagerChange() {
    $('#DepartmentManagerHiddenField').val($('#ddlDeparmentManagers').val());
}

然后在您的lbSearch_Click方法中:

grdDepartmentEmployees.DataSource =
    service.FindListBySearch(SelectedDepartmentHiddenField.Value,
        DepartmentManagerHiddenField.Value);                    
grdDepartmentEmployees.DataBind();

请注意,使用这两种方法,您都不需要下拉列表中的runat="server"标记。