[英]Controls event not executing after calling webmethod using jQuery Ajax
我在gridview編輯模板中使用級聯下拉列表。 對於綁定下拉列表,我使用了一個通過Web方法調用的類,到目前為止,所有方法都工作正常,綁定下拉列表非常好。
現在的問題是,我在第二個dropdownlist選定的indexchanged事件下編寫了一些代碼,但是它不會執行第二個dropdown的選定索引更改事件。 我設置了autopostback = true和EnableEventValidation =“ false”,但是沒有運氣。
如何執行第二個下拉選擇的索引已更改事件? 此外,它不會執行gridview編輯模板中的任何其他控件的事件。
注意:我在gridview EditTemplate中使用了所有dropdownlist。
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方法綁定dropdownlist之后不執行的事件。
Protected Sub cbCategoryName_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
tbName.text="Your Selected category is blah blah"
End Sub
我在上面的代碼中做了一些更改(我使用了loadSubcategroy($(“ select option:selected”)。val());而不是loadSubcategroy($ ddlSub.val());)然后它命中了selectedindex_changed事件。 但是現在回發后出現問題,它丟失了所有使用jQuery綁定的數據。
那么回發后如何將數據保存在dropdownlist中?
根據您的評論,我的回答仍然有效。 因為您要填充客戶端的下拉列表,所以ViewState不包含任何項目,因此無法按您的方式工作。 您正在混合使用兩種不同的平台(jQuery和.NET)。
選項1-將您的下拉列表包裝在UpdatePanel
,並從后面的代碼處理數據綁定。 這會將ListItems放在ViewState中,這將允許您的Submit按鈕的事件查看值。
選項2-使用jQuery完成所有操作。 您可以使用Request.Form(cbCategoryName.UniqueID)
提交按鈕來獲得下拉菜單的值。 這種方法的缺點是下拉列表在回發時不會保留其列表項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.