2016-08-01 56 views
0

我有一個網頁,由兩個下拉框和一個gridview組成。我創建了一個Web服務,收集下拉框的數據,並使用ajax調用來填充它們。我遇到的問題是當我嘗試添加一個OnSelectedIndexChanged事件處理程序時,它似乎沒有正常工作。我環顧四周,並嘗試了一些東西。我已將EnableEventValidation設置爲false(我認爲這解決了與我的ddl在js中動態填充有關的問題)。我也在我的ddl上啓用了AutoPostBack。調用代碼後面的事件處理程序不起作用

當我更改ddl索引時,頁面似乎回傳,但我的dll索引反轉回到先前選定的索引。

<div class="row control-group"> 
    <div class="form-group col-xs-12" id="mailbox"> 
      <label>Which bills would you like to view?</label> 
      <asp:DropDownList ID="ddlDepartment" runat="server" CssClass="form-control"></asp:DropDownList> 
      <asp:DropDownList ID="ddlUser" runat="server" CssClass="form-control" OnSelectedIndexChanged="ddlUser_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList> 
      <p class="help-block text-danger"></p> 
    </div> 
</div> 

The var a = 1;只是爲了讓我可以在那裏放置一個斷點。

protected void ddlUser_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var a = 1; 
} 

下面是AJAX請求和電網的發電

function getUsers() { 

    var department = $('select#MainContent_ddlDepartment option:selected').val(); 

    $.ajax({ 
     type: "GET", 
     url: "WEBSERVICEURL" + department + "", 
     contentType: "json", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      var ddlUsers = $("#MainContent_ddlUser"); 
      ddlUsers.empty(); 
      $.each(data, function() { 
       ddlUsers.append($("<option></option>").val(this['SamAccountName']).html(this['DisplayName'])); 
      }); 
     }, 
     error: function (xhr) { 
     } 
    }) 
} 

感謝

+0

你有你的asp.net控件ASP內部:形式RUNAT =服務器? –

+0

@ZaidAlShattle是 –

回答

0

你不能這樣做this.There是內置到ASP.NET中的安全功能稱爲事件驗證這會阻止您發佈頁面由服務器創建時不在其中的數據。

您(或黑客)正在使用javascript更改下拉選項,然後嘗試通過SelectedIndexChanged將更改提交到服務器 - 您能否看到爲什麼不允許這樣做?

作爲一種變通方法可以實現對降change()事件下使用jQuery,並使用服務器端調用$阿賈克斯:

$("#ddlUser").change(function() { 
    alert("write $.ajax call to call the server here..."); 
}); 
+0

我認爲我現在只能使用客戶端調用,然後呢?除了像你提到的那樣使用更多的ajax。這是否影響頁面上的其他元素或只是這些ddls?謝謝 –

+0

它會影響ASP.NET中的所有服務器端控件。您絕對不會「鎖定」使用客戶端代碼。您始終可以在ddlDepartment上創建OnSelectedIndexChanged並從服務器端綁定ddlUser。如果以這種方式執行此操作,那麼你可以爲ddlUser調用OnSelectedIndexChanged,並且已過濾的下拉菜單完全在服務器端完成 –

+0

不幸的是,部門ddl也是填充客戶端的。這些下拉菜單的原因是根據ddl中的選擇用戶更改gridview中的數據。糾正我,如果我錯了,但WebMethods需要是靜態的,你不能從靜態方法引用控件?很多謝謝 –

相關問題