jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用JQuery Ajax进行MVC5错误处理大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个带有viewmodel的标准表单设置和这样的验证.

视图模型

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调用,这使得这项工作有所不同.

解决方法

现在,您的控制器只是吞下任何@L_772_5@ – 如果模型无效,它只是不保存并且从不向调用者提供任何反馈.您可以通过实际返回@L_772_5@来修复此问题并让它向jQuery返回@L_772_5@:

return new httpStatusCodeResult(httpStatusCode.badrequest,"Some meaningful message");

关于你想要处理什么以及返回多少细节的许多选项,但重点是你的控制器应该提供适合它所执行的实际操作的响应.

updatE

为了回应你的“再次更新”部分 – 我不会返回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,请注明来意。