我在gridview编辑模板中使用级联下拉列表。对于绑定下拉列表,我使用了一些使用web方法调用的类,到目前为止一切正常,它是绑定下拉列表。
现在的问题是我在第二个dropdownlist选择了indexchanged事件下写了一些代码,但是它不会执行第二个下拉列表的选定索引更改事件。我设置了autopostback = true和EnableEventValidation =" false",但没有运气。
如何执行第二个下拉列表选择索引更改事件?此外,它不会执行gridview编辑模板中的任何其他控件事件。
注意:我在gridview EditTemplate中使用了所有下拉列表。
VS 2010,代码隐藏:Vb.net
这是我的代码:
//calling webmethod using JqueryAjax
var $ddl = $("select[name$=cbCompany]");
$ddl.select2();
var $ddlSub = $("select[name$=cbCategoryName]");
loadSubjects($("select option:selected").val());
$ddlSub.fadeIn("slow");
$ddlSub.bind("change keyup", function () {
$ddlSub.select2();
loadSubcategroy($ddlSub.val());
$cbSubCategoryName.fadeIn("slow");
});
}
function loadSubjects(selectedItem) {
$.ajax({
type: "POST",
url: "frmTimeBilling.aspx/GetSubjectList",
data: "{deptAliasName:'" + selectedItem + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (data) {
printSub(data.d);
},
error: function (xhr, status, err) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
});
}
function printSub(data) {
$("select[name*=cbCategoryName] > option").remove();
$("select[name*=cbCategoryName]").append(
$("<option></option>").val("Select Subject").html("Select Subject")
);
for (var i = 0; i < data.length; i++) {
$("select[name*=cbCategoryName]").append(
$("<option>
</option>").val(data[i].subAliasName).html(data[i].subName)
);
}
$("#subjectdiv").css("display", "block");
$("select[name$=cbCategoryName]").select2();
}
下面是使用上面的jQuery Ajax方法调用的Web方法代码
<WebMethod()> _
<ScriptMethod(UseHttpGet:=False, ResponseFormat:=ResponseFormat.Json)> _
Public Shared Function GetSubjectList(ByVal deptAliasName As String) As List(Of
Data)
Dim [sub] As New Data()
Dim lstSubs As List(Of Data) = [sub].GetCategory("", "CategoryName",
deptAliasName).ToList()
Dim a As Integer = lstSubs.Count
Return lstSubs
End Function
这是使用jQuery ajax方法绑定下拉列表后未执行的事件。
Protected Sub cbCategoryName_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
tbName.text="Your Selected category is blah blah"
End Sub
我做了一些更改(我在上面的代码中使用了loadSubcategroy($(&#34; select option:selected&#34;)。val());而不是loadSubcategroy($ ddlSub.val());)点击selectedindex_changed事件。但现在回发后的问题,它丢失了使用jQuery绑定的所有数据。
那么我如何在回发后将数据保存在下拉列表中?
答案 0 :(得分:0)
根据您的评论,我的回答仍然有效。因为您正在填写客户端的下拉列表,所以ViewState不包含任何项目,因此它不会按照您的方式工作。您正在混合两个不同的平台(jQuery和.NET)。
选项1 - 将您的下拉列表包裹在UpdatePanel
中,并从代码隐藏处理数据绑定。这会将ListItem放在ViewState中,这将允许您的提交按钮的事件看到值。
选项2. - 使用jQuery做所有事情。您的提交按钮可以使用Request.Form(cbCategoryName.UniqueID)
获取下拉列表的值。这种方法的缺点是下拉列表不会在回发时保留其列表项。