在ASP.Net MVC中编写Ajax调用时,就发出调用,在服务器上处理它们以及处理客户端上的成功和失败而言,我们有很多选择。有些事情显然有正确的答案,但我一直无法找到明确的指导。那么,端到端,进行ajax调用的正确方法是什么?
包括
人们对此有何看法?
答案 0 :(得分:21)
答案 1 :(得分:6)
将url操作的url注入ajax调用的最佳方法是什么?
就我个人而言,我在DOM元素上使用HTML5 data- *属性。例如:
<div id="foo" data-url="@Url.Action("foo")">Foo Bar</div>
然后:
$('#foo').click(function() {
var url = $(this).data('url');
// TODO: perform the AJAX call
});
当然,如果DOM元素表示锚或表单,我将使用本机属性(action或href)。
选择JsonBehavior时有哪些注意事项?
没有具体考虑因素。请记住,客户端浏览器可能会缓存GET请求,因此您可能需要在客户端上指定{ cache: false }
。哦,当然还有Jason服务器上的AllowGet。
在服务器端处理错误的最佳方法是什么?
我个人使用FluentValidation.NET来处理视图模型上的验证错误。 service layer可能会出现错误。
在客户端处理错误的最佳方法是什么?
如果服务器返回JSON,我通常有一个看起来如下的结构:
{ error = 'some error message', result: null }
或:
{ error = null, result: { foo: 'bar' } }
取决于是否存在错误,并在客户端上:
success: function(data) {
if (data.error != null && data.error != '') {
// error
} else {
// use data.result
}
}
我对服务器上未处理的异常的所有内容使用error
回调,在这种情况下只显示一些通用错误消息。可以使用$.ajaxSetup
指定全局错误处理程序。
为了简化在服务器上生成这些JSON结果并干掉我的操作,我使用自定义操作过滤器来测试请求是否是AJAX请求,以及是否是AJAX请求测试是否有添加到ModelState的验证错误如果他们用自定义错误JsonResult替换动作结果以处理错误情况。
答案 2 :(得分:0)
以下是我在最近的一些项目中的工作方式:
1)我使用Url.Action调用在视图中注入ajax url。
2)Jqgrid使用GET来获取网格数据,因此在填充网格控制器操作中,我需要在Json方法调用中使用JsonRequestBehavior.AllowGet开关。
3)我最近切换到微软不引人注意的客户端验证,它有一个简洁的ModelState.IsValid方法,您可以在控制器操作中运行服务器端,以确保在服务器端也运行相同的确切验证而无需代码复制。它花了一些工作将它与jquery.maskedinput进行网格划分等等,以掩盖/取消屏蔽数据,here's the article on how to get all that to work。
4)关于显示错误客户端,这是一个必须由利益相关者充实的设计问题。就个人而言,我不喜欢文本框旁边的验证或页面顶部的验证摘要。我更喜欢错误跳出你的脸,因此我调整了微软的jquery.validate.unobtrusive.js以在弹出模式对话框中显示错误。您可以在jquery.validate.unobtrusive.MOD.js文件中看到上面解决方案中的代码(请注意我的版本后缀为“.mod.js”),您可以在Site.Master中看到错误对话框。 / p>
控制器操作示例:
[HttpPost]
public ActionResult Index(PersonalInformation model)
{
if (ModelState.IsValid)
{
// TODO: sell personal information to sleazeballs
TempData["PersonalInformation"] = model;
return RedirectToAction("Success");
}
// If we got this far, something failed, redisplay form
Index_Load();
return View(model);
}
希望这有帮助,
罗伯特