大佬教程收集整理的这篇文章主要介绍了使用JQuery Ajax进行MVC5错误处理,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
视图模型
public class EditEventviewmodel { public int EventID { get; set; } [StringLength(10)] public String EventName { get; set; } }
视图中的表单
@using (Html.beginForm(null,null,FormMethod.Post,new {id="editEventForm"})) { @Html.AntiForgeryToken() @Html.LabelFor(model => model.EventName) @Html.EditorFor(model => model.EventName) @Html.ValidationmessageFor(model => model.EventName) }
调节器
[httpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "EventName")] Eventviewmodel model) { //Get the specific record to be updated var eventRecord = (from e in db.Event where e.EventID == model.EventID SELEct E).SingLeorDefault(); //update the data if (ModelState.IsValid) { eventRecord.EventName = model.EventName; db.SaveChanges(); } return RedirectToAction("Index"); }
现在,如果我执行常规表单提交并输入字符串长度超过10的EventName,将触发模型@L_772_5@,并在视图中的验证消息中通知我.
但是,我更喜欢像这样使用JQuery AJax提交表单.
$.ajax({ type: "POST",url: "/EditEvent/Edit",data: $('#editEventForm').serialize(),success: function () { },error: function () { } });
通过这种方式,我在客户端添加一些javascript以在提交之前进行验证,但我仍然希望viewmodel中的数据注释作为备份.
当它到达控制器时,仍然使用if(ModelState.IsValid)进行检查.如果它无效,则数据不会像设计的那样写入数据库.
现在,我想知道当使用JQuery发布时,如果ModelState无效,我该怎么办.这不会触发常规验证,因此我该怎么做才能发回@L_772_5@信息?
if (ModelState.IsValid) { eventRecord.EventName = model.EventName; db.SaveChanges(); } else { //what can I do here to signify an error? }
更新更多信息
我已经在Web.config中设置了自定义@L_772_5@
<customErrors mode="On">
这会将@L_772_5@路由到Views / Shared / Error.cshtml文件,在那里我输出有关在那里获得请求的@L_772_5@的信息.
无论如何,控制器中的模型状态@L_772_5@(或任何@L_772_5@)可以在这里发送吗?
@model System.Web.Mvc.HandleErrorInfo @{ Layout = null; ViewBag.title = "Error"; } <h1 class="text-danger">Error.</h1> <h2 class="text-danger">An error occurred while processing your request.</h2> <p> Controller: @model.ControllerName <br /> Action: @model.ActionName <br /> Exception: @model.Exception.message </p>
再次更新
这是另一个更新处理所有响应的部分.
在我的控制器中,我把它放在else语句中抛出新的httpException(500,“ModelState Invalid”); (否则 – 意味着ModelState无效)
这会在Web.config中触发我的自定义@L_772_5@以发送到Views / Shared / Error.cshtml,(种类),但这只会在FireBug中显示出来.实际的页面不会去任何地方.知道如何在父页面上得到这个吗?
如果这没有意义,我一直在使用here描述的设置,发送到我的自定义@L_772_5@页面.事实上这是一个AJAX调用,这使得这项工作有所不同.
return new httpStatusCodeResult(httpStatusCode.badrequest,"Some meaningful message");
关于你想要处理什么以及返回多少细节的许多选项,但重点是你的控制器应该提供适合它所执行的实际操作的响应.
为了回应你的“再次更新”部分 – 我不会返回500 – 这意味着“内部服务器@L_772_5@”.如果要返回@L_772_5@,则400(@L_772_5@请求)可能更合适.无论如何,您对ajax调用的问题是它从Web服务器(而不是您的主浏览器窗口)收到@L_772_5@响应.如果我不得不猜测,@L_772_5@是在服务器端处理,你是jquery从你的自定义@L_772_5@接收html响应.
如果您要保留自动@L_772_5@处理,则应该仅将其用于未处理的@L_772_5@.因此,在您的控制器中,您将通过返回指示此状态的非@L_772_5@响应来处理无效模型(我认为其他人提到了json响应).然后,所有响应都会成功,但内容会告诉您的应用程序如何表现(适当地重定向等等).
以上是大佬教程为你收集整理的使用JQuery Ajax进行MVC5错误处理全部内容,希望文章能够帮你解决使用JQuery Ajax进行MVC5错误处理所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。