我有一个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#方法时,两个下拉列表似乎都是空的。
答案 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"
标记。