0

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

这是 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# 方法时,两个下拉列表似乎都是空的。

4

1 回答 1

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"下拉列表中的标签。

于 2012-10-22T07:34:01.970 回答