2013-08-20 47 views
0

我轉換的URL,用戶友好的,但問題是,它使我的AJAX無法正常使用:返回JSON的,相反,它與text/html; charset=utf-8響應,任何想法?友好的URL使Ajax來沒有得到正確的URL

本地主機/主頁/票?標籤= 0

本地主機/主頁/票/ 0

jQuery的數據表

self.$('#tblticket').dataTable({ 
    "bDestroy": true, 
    "bServerSide": true, 
    "sAjaxSource": '/Home/Ticket/AjaxHandler', 
    "fnServerParams": function (aoData){ 
    aoData.push({ "name": "sStatus", "value": status }); 
}, 

路由器

routes.MapRoute(
    name: "TicketRoute", 
    url: "Ticket/{tab}", 
    defaults: new { controller = "Ticket", action = "Index", tab = UrlParameter.Optional } 
); 

更新1

如果我更改路由器這一點,它的工作原理,但是URL看起來像 本地主機/主頁/票/索引/ 0。路由器會干擾ajax調用,有什麼想法嗎?我想要的網址看起來像這樣本地主機/主頁/票/ 0,仍然能夠Ajax調用,我不知道,什麼可以做什麼?

 routes.MapRoute(
      name: "TicketRoute", 
      url: "Ticket/Index/{tab}", 
      defaults: new { controller = "Ticket", action = "Index", tab = UrlParameter.Optional } 
     ); 
+0

在我看來,問題出在'sAjaxSource「:'/ Home/Ticket/AjaxHandler','但是你可以使用FireBug中的網絡標籤輕鬆檢查發生了什麼 –

+0

源URL是否正確?不應該是'家/票/ 0'嗎? – Nilesh

+0

AjaxHandler是在後面的代碼中調用httpget,如果沒有urlfriendlylines,它會工作找到,但是在我改變它之後,它不能正常工作,因爲它保持返回爲text/html,我在調用url友好之前和之後,都通過相同,但內容類型是不同的 – Se0ng11

回答

2

在我MVC4版本我做了以下內容:

  1. 創建我的控制器的方法是數據表可以訪問

    [HttpGet] 
    public ActionResult GetRecords(jQueryDataTableParamModel param) 
    { 
        #region ViewModel Binding with TotalRecords count, pagination and search 
        List<vm_DataTable_TableName> model; 
        int totalRecords = 0; 
        using (DBEntities db = new DBEntities()) 
        { 
         model = Mapper.Map(db.GetRecords(), new List<vm_DataTable_TableName>()); //Using AutoMapper for viewmodel bindings 
         totalRecords = model.Count(); 
        } 
        #endregion 
    
        #region Filtration/Pagination 
        var filtered = ***Filter depending on your needs*** 
    
        var displayed = filtered.Skip(param.iDisplayStart).Take(param.iDisplayLength); 
        #endregion 
    
        #region Convert Result to String Array for JSON Conversion/Trim excess white space to reduce size of result 
        IEnumerable<string[]> result = new List<string[]>(); 
        result = displayed 
          .Select(s => new string[] { 
           (!string.IsNullOrEmpty(Convert.ToString(s.ID))) ? s.ID.ToString().Trim() : string.Empty, 
           (!string.IsNullOrEmpty(s.val_1)) ? s.val_1.Trim() : string.Empty, 
           (!string.IsNullOrEmpty(s.val_2)) ? s.val_2.Trim() : string.Empty, 
           (!string.IsNullOrEmpty(s.val_3)) ? s.val_3.Trim() : string.Empty 
          }); 
        #endregion 
    
        return Json(new 
        { 
         sEcho = param.sEcho, 
         iTotalRecords = totalRecords, 
         iTotalDisplayRecords = filtered.Count(), 
         aaData = result 
        }, 
        JsonRequestBehavior.AllowGet); 
    } 
    
  2. 在jQuery的數據表初始化:

    $('#tblticket').dataTable({ 
        "bDestroy": true, 
        "bServerSide": true, 
        "sAjaxSource": '@Url.Content("~/Home/Ticket/GetRecords")', //Server inserted url 
        "fnServerData": function Data(sSource, aoData, fnCallback) { 
         $.ajax({ 
          "dataType": "json", 
          "contentType": "application/json; charset=utf-8", 
          "type": "GET", 
          "url": sSource, 
          "data": aoData, 
          "success": 
           function (msg) { 
            //Whatever other actions you want to do with the data 
            fnCallback(msg); 
           }, 
          "failure": 
           function (XMLHttpRequest, textStatus, errorThrown) { 
            alert(XMLHttpRequest.status); 
            alert(XMLHttpRequest.responseText); 
           } 
         }); 
        } 
    }); 
    

'@ Url.Content( 「」)' 也是友好的使用MVC領域時。

These系列文章對我幫助很大,當我使用這個插件第一次開始。

+0

url.content不會在外部腳本的工作,任何地方,感謝信息:) – Se0ng11

+0

你把上面的代碼內嵌在你的視圖的服務器代碼的工作。或者,或者創建一個函數調用,將相對路徑以這種方式傳遞到ajax源代碼中(如果我正在閱讀註釋權限)。 – Tay