我将URL转换为用户友好的格式,但是问题是,这导致我的AJAX无法正常工作:它没有返回JSON,而是以响应text/html; charset=utf-8
,知道吗?
本地主机/首页/票证?tab = 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看起来像localhost / Home / Ticket / Index / 0。路由器会干扰ajax调用,知道吗?我希望url看起来像是localhost / Home / Ticket / 0,并且仍然能够进行ajax调用,我不知道,该怎么办?
routes.MapRoute(
name: "TicketRoute",
url: "Ticket/Index/{tab}",
defaults: new { controller = "Ticket", action = "Index", tab = UrlParameter.Optional }
);
在我的MVC4版本中,我执行了以下操作:
在控制器中创建了DataTables可以访问的方法
[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);
}
在jQuery DataTables初始化中:
$('#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);
}
});
}
});
使用MVC区域时,“ @ Url.Content(“”)'也很友好。
当我第一次开始使用此插件时,这些系列文章对我有很大帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句