通过jQuery传递所选的主DropDownList项,并检索和绑定从属DropDownList的项
我有2个DropDownList和一个服务器端带有HttpHandler的jQuery脚本,我不知道如何通过jQuery传递参数,以及如何在Slave下拉列表中检索绑定的多个项 这是我的默认.aspx代码:通过jQuery传递所选的主DropDownList项,并检索和绑定从属DropDownList的项,jquery,asp.net,httphandler,Jquery,Asp.net,Httphandler,我有2个DropDownList和一个服务器端带有HttpHandler的jQuery脚本,我不知道如何通过jQuery传递参数,以及如何在Slave下拉列表中检索绑定的多个项 这是我的默认.aspx代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ Page Langu
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org
/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="Sample001.Default" %>
<script src="jquery-1.6.4.min.js" type="text/javascript"></script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<asp:Label ID="masterlbl" Text="Master" runat="server" />
</td>
<td>
<span class="Mastercs">
<asp:DropDownList ID="ddl1" runat="server">
<asp:ListItem Text="Item1" Value="Item1" />
<asp:ListItem Text="Item2" Value="Item2" />
<asp:ListItem Text="Item3" Value="Item3" />
<asp:ListItem Text="Item4" Value="Item4" />
<asp:ListItem Text="Item5" Value="Item5" />
</asp:DropDownList>
</span>
</td>
<td>
<asp:Label ID="slavelbl" Text="Slave" runat="server" />
</td>
<td>
<span class="slavecs">
<asp:DropDownList ID="ddl2" runat="server" />
</span>
</td>
</tr>
</table>
</div>
</form>
<script type="text/javascript">
$(document).ready(function () {
$('span.Mastercs select').change(function () {
$.ajax({
type: "POST",
url: 'MyHandler.ashx',
dataType: "text",
data: "ItemSelected=" + $('select#ddl1').val(),
async: true,
success: function (data) { Handler_Success(data); }
});
});
function Handler_Success(data) {
$('select#ddl2').empty();
$.each(data, function (i, slaveValue) {
$('select#ddl2').append($('<option>/option>')
.val(data.Value).html(data.Text));
});
}
});
</script>
</body>
</html>
另外,当我将脚本成功方法更改为以下代码时,ddl2(DropDownList)会正确绑定:
function Handler_Success(data) {
$('select#ddl2').empty();
$.each(data, function (i, slaveValue) {
$('select#ddl2').append($('<option>
</option>').val('sv1').html('s1'));
});
}
函数处理程序\u成功(数据){
$('select#ddl2').empty();
$.each(数据、函数(i、slaveValue){
$('select#ddl2')。追加($('
.val('sv1').html('s1');
});
}
正如您看到的ddl2(DropDownList)与上述代码正确绑定,
问题在哪里?
为什么我可以在Firebug中看到响应,但绑定不起作用?这应该可以做到:
Jquery AJAX调用:
$.ajax({
type: "POST",
url: 'MyHandler.ashx',
dataType: "text",
data: "ItemSelected=" + $('select.ddl1').val();,
async: true,
success: function(data) { Handler_Success(data); },
error: function(er) { Handler_Error(er); }
});
处理程序:
public class SlaveValue
{
public string Value {get; set;}
public string Text {get; set;}
}
public void ProcessRequest (HttpContext context) {
string valueSelected = context.Request["ItemSelected"]
List<SlaveValue> slaveValues = new List<SlaveValue>();
//POPULATE SLAVEVALUES HERE
//JSON-ify the list
string responseText = JsonConvert.SerializeObject(slaveValues);
context.Response.ContentType = "text/json";
context.Response.Write(responseText);
}
公共类从属值
{
公共字符串值{get;set;}
公共字符串文本{get;set;}
}
公共void ProcessRequest(HttpContext上下文){
string valueSelected=context.Request[“ItemSelected”]
List slaveValues=新列表();
//在此处填充SLAVEVALUES
//让名单上的人都知道
string responseText=JsonConvert.SerializeObject(slaveValues);
context.Response.ContentType=“text/json”;
context.Response.Write(responseText);
}
AJAX处理程序
function Handler_Success(data) {
//clear out old options (if any)
$('select.ddl2').empty()
$.each(data, function(i, slaveValue) {
$('select.ddl2').append(
$('<option></option>').val(slaveValue.Value).html(slaveValue.Text)
)
}
}
函数处理程序\u成功(数据){
//清除旧选项(如果有)
$('select.ddl2').empty()
$.each(数据、函数(i、slaveValue){
$('select.ddl2')。追加(
$('').val(slaveValue.Value).html(slaveValue.Text)
)
}
}
我正在使用Json.NET序列化SlaveValues集合。这可能非常有用,因为您的问题有一个完整的逐步解决方案:
Shai,谢谢您的回复,我按照您说的做了,但是绑定SlaveDropDownList中有一个问题,我编辑了我的问题,您可以在上面看到我的新代码,您知道问题出在哪里吗?@Saeid:如果我正确阅读了您的代码:$('select#ddl2')。append($('.val('sv1').html('s1'));您实际上没有绑定到返回的数据。代码只是添加了带有“sv1”和“s1”的选项。我的原始代码有一个bug。我现在编辑了它。基本上,追加应该是这样的:$('select#ddl2')。追加($(''.val(slaveValue.Value).html(slaveValue.Text));我完全按照您所说的做了,但不起作用,关于这段代码$('select#ddl2')).append($('').val('sv1').html('s1'));正如你提到的,这不是主绑定,我用这段代码说,没有任何返回值,我可以正确绑定,但是返回值附加到从属ddl,什么也不显示。好吧,让我们来解决这个问题……让我们放置几个断点:在这些行上放置一个断点,让我知道输出是什么。什么是“responseText”此处:context.Response.Write(responseText);此处的“数据”是什么:$('select.ddl2').empty()。此处的“slaveValue”是什么:$('select#ddl2')。追加($('...)。。。。
public class SlaveValue
{
public string Value {get; set;}
public string Text {get; set;}
}
public void ProcessRequest (HttpContext context) {
string valueSelected = context.Request["ItemSelected"]
List<SlaveValue> slaveValues = new List<SlaveValue>();
//POPULATE SLAVEVALUES HERE
//JSON-ify the list
string responseText = JsonConvert.SerializeObject(slaveValues);
context.Response.ContentType = "text/json";
context.Response.Write(responseText);
}
function Handler_Success(data) {
//clear out old options (if any)
$('select.ddl2').empty()
$.each(data, function(i, slaveValue) {
$('select.ddl2').append(
$('<option></option>').val(slaveValue.Value).html(slaveValue.Text)
)
}
}