簡體   English   中英

使用jQuery Ajax調用webmethod后控制事件未執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM