2016-12-15 20 views
3

我有一個簡單的觀點,即顯示數據的表格,我要排序的列時,其中一個報頭由AJAX點擊,我是新來的AJAX和JS,所以這是我的觀點嘗試:如何從javascript函數發送參數給Action?

<table id="tbl" class="table"> 
    <tr> 
     <th> 
      <a style="cursor: pointer" onclick="getData('desc')" id="sort">Title</a> 
     </th> 
     <th> 
      Author 
     </th> 
     <th></th> 
    </tr> 
</table> 

@section scripts{ 
    <script type="text/javascript"> 
     $(document).ready(getData('asc')) 
     function getData(sort) { 
      var srt = sort; 
      $.ajax({ 
       type: 'GET', 
       url: '/Book/BooksData/' + srt, 
       dataTtype: 'json', 
       success: function (data) { 
        $("#tbl > tr").remove(); 
        $.each(data, function (index, val) { 
         $('#tbl').append('<tr><td>' + val.Title + '</td><td>' + val.Author.Name + '</td></tr>') 
        }); 
       } 
      }); 
     } 
    </script> 
} 

但是當我點擊標題中的sort參數會動作空,

public JsonResult BooksData(string sort) 
{ 
    var books = new List<Book>(); 
    if (sort == "asc") books = db.Books.Include(b => b.Author).OrderBy(b => b.Title).ToList(); 
    else books = db.Books.Include(b => b.Author).OrderByDescending(b => b.Title).ToList(); 

    return Json(books, JsonRequestBehavior.AllowGet); 
} 

是我做錯了,但我修改了很多次,我看不出除了邏輯錯誤在JavaScript中傳遞參數不同於C#

+1

除非你爲''Book/BooksData/{sort}'定義了一個指定路由,那麼你需要將該值作爲查詢字符串值添加,而不是路由值 –

+0

是的,我忘記了:( –

回答

3

這裏是最簡單的方式。您需要使用query字符串連接sort值到url

現在,當你點擊標題中的排序參數必須去與在動作你的價值。

請試試這個:

$.ajax({ 
     type: 'GET', 
     url: '/Book/BooksData?sort=' + srt, 
     dataType: 'json', 
     success: function (data) { 
      $("#tbl > tr").remove(); 
      $.each(data, function (index, val) { 
       $('#tbl').append('<tr><td>' + val.Title + '</td><td>' + val.Author.Name + '</td></tr>') 
      }); 
     } 
}); 

另一種方法是使用:

url: '@Url.Action("BooksData","Book")?sort=' + srt 

@Url.Action回報只是一個字符串。

Razor使用@塊每個內容被自動的HTML通過Razor編碼。

+1

@MohamedAhmed ,你有沒有試過我的解決方案? –

+0

謝謝,它的工作原理, 似乎忘記了查詢字符串! –

+0

不客氣! –

相關問題