2015-06-29 62 views
0

我想通過AJAX在我的C#代碼中調用WebMethod ..我有一個引導程序模式,需要在點擊鏈接按鈕時顯示,也是在按下鏈接按鈕時,它將通過AJAX觸發一個WebMethod,它使用查詢中的結果集填充模態主體中的表格。ASP.NET和C#中的AJAX問題

這是我的代碼:

ASP.NET

<asp:LinkButton href="#viewemydevices" data-toggle="modal" ID="ViewMyDevices" runat="server"> 
<div class="panel-footer announcement-bottom"> 
<div class="row"> 
     <div class="col-xs-6"> 
     View Devices 
     </div> 
     <div class="col-xs-6 text-right"> 
      <i class="fa fa-arrow-circle-right"></i> 
     </div> 
</div> 

<div class="modal fade" id="viewemydevices" role="dialog"> 
<div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
      <h4>This is a section</h4> 
     </div> 
     <div class="modal-body"> 
      <table id="MyDevicesTable" class="table tbody" runat="server" visible="false"> 
       <tbody> 
        <tr> 
         <td> 
          <asp:DataGrid ID="MyDevicesGrid" runat="server" CssClass="table table-striped tbody" Visible="false" 
           AutoGenerateColumns="True" 
           ForeColor="black" 
           HeaderStyle-Font-Bold="true" 
           HeaderStyle-ForeColor="black" 
           GridLines="None" 
           EnableViewState="false" 
           AllowSorting="True"/> 
         </td> 
        </tr> 
       </tbody> 
      </table> 
     </div> 
     <div class="modal-footer"> 
      <a class="btn btn-primary" data-dismiss="modal">Close</a> 
     </div> 

    </div> 
</div> 

<script type="text/javascript"> 

    $.ajax({ 
     url: 'Default.aspx/ViewMyDevices', 
     type: "POST", 
     data: '{}', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      $('#ViewMyDevices').click(); 
     } 
    }); 

</script> 

C#

[WebMethod] 
    public void ViewMyDevices() 
    { 
    string selectMyDevices = "My Query, it works fine"; 

    sqlCmd = new SqlCommand(selectMyDevices, sqlConn); 
    sqlConn.Open(); 

    SqlDataReader rdrMyDevices = sqlCmd.ExecuteReader(); 

    //reads row into datagrid 
    if (rdrMyDevices.HasRows) 
    { 
     //sets table/grid to visible 
     MyDevicesGrid.Visible = true; 
     MyDevicesTable.Visible = true; 

     //adds data to grid 
     MyDevicesGrid.DataSource = rdrMyDevices; 
     MyDevicesGrid.DataBind(); 
    } 
    sqlConn.Close(); 
} 

我不知道我錯過了什麼,該模式被顯示,但沒有數據顯示。所以我認爲AJAX並沒有被解僱......

有什麼建議嗎?

+0

您可以通過在瀏覽器中查看開發人員工具來判斷ajax是否被解僱。例如,對於Firefox,只需右鍵單擊並選擇「檢查元素」。點擊「網絡」,你可以看到對服務器進行的任何呼叫。 Internet Explorer和Google Chrome都有類似的工具。 – user1304444

+0

沒錯,它並沒有被解僱。我可以證實這一點。 – codeBoy

+0

我注意到你的linkbutton中有一個額外的'e':'href =「#viewemydevices」'是這個問題嗎? – user1304444

回答

0

基於粗略的代碼,需要做一些額外的工作才能完成這項工作。我可以看到的步驟如下:

  • 將'ClientIDMode ='static''屬性添加到您的linkbutton。

  • 給ID發送給模態體的div:

    < DIV類= 「模態體」 ID = 「爲myContent」 >

  • AJAX請求需要綁定到按鈕。在原始代碼示例中,反過來--ajax響應執行按鈕單擊。

  • 從服務器收到響應後,響應中的HTML內容需要寫入模態對話框內容佔位符,如下所示:'$('#myContent')。html(data);'。請參見下面的完整樣本JS:

    $('#ViewMyDevices').click(
        function(){ 
         $.ajax({ 
          url: 'Default.aspx?method=ViewMyDevices', 
          type: "POST", 
          data: '{}', 
          contentType: "application/json; charset=utf-8", 
          dataType: "json", 
          success: function (data) { 
           $('#myContent').html(data); 
          } 
         }) 
        }); 
    
  • 的方法並不叫自動爲您,因爲你似乎可以用ASP.NET,而不是MVC。你需要連接邏輯來自己調用它。因此,例如,您可以使用如下參數執行ajax請求:'Default.aspx?method = ViewMyDevices'。然後在你的aspx頁面的頁面加載事件中,你需要檢查請求是否是類型post,並且查詢參數匹配方法名稱。事情是這樣的:

    public void Page_Load(object sender, EventArgs e) 
    { 
        if(Request.HttpMethod == "POST" && Request.QueryString["method"] == "ViewMyDevices") 
        { 
         ViewMyDevices(); 
        } 
    } 
    
  • 然後,你需要重寫Render aspx頁面的方法和檢測,如果你正在做一個POST請求,在這種情況下,只有渲染網頁中所需的部分,這是該表:

    protected override void Render(HtmlTextWriter writer) 
    { 
        if(Request.HttpMethod == "POST") 
        { 
         MyDevicesTable.Render(writer); 
         return; 
        } 
    
        base.Render(writer); 
    } 
    

這一點,我相信,應該爲你工作。