关于asp.net:jquery ajax帖子,其中包含从服务器返回的错误和成功消息

jquery ajax post with error and success message returned from the server

这是我的看法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    @using ( Html.BeginForm("jQueryPost","Home",null, FormMethod.Post, new { id="FormPost" }))
    {
    @Html.TextBoxFor(x=> x.Name)<br />
    @Html.TextBoxFor(x => x.LastName)<br />
    @Html.TextBoxFor(x => x.Age)
    <input type=submit value="submit" />
    }




    $(document).ready(function () {
        $('#FormPost').submit(function (e) {
            //This line will prevent the form from submitting
            e.preventDefault();
            alert('ajax post here');

            $.ajax({
                type: 'POST',
                url: $('#FormPost').attr('action'),
                data: $('#FormPost').serialize(),
                accept: 'application/json',
                error: function (xhr, status, error) {
                    alert('error: ' + xhr.statusText);
                },
                success: function (response) {
                    alert('resp: ' + response.data);
                }
            });
        });


    });

这是家庭控制器的方法,表格发布到:

1
2
3
4
5
6
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult jQueryPost(IndexVM vm)
{
    IndexVM _vm = vm;
    return Json("name posted was:" + _vm.Name);
}

当我提交表单时,我会在警告框中显示"resp:undefined"。 如何将"发布的名称为:......"文本返回到成功帖子的视图?

当我将此行添加到操作时也是例外

1
2
3
4
5
6
7
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult jQueryPost(IndexVM vm)
{
    IndexVM _vm = vm;
    throw new Exception("custom error string from action");
    return Json("name posted was:" + _vm.Name);
}

我收到消息'错误:内部服务器错误'。 我想在错误中返回消息的文本,如下所示:'错误:自定义错误字符串来自行动'这样做的方法是什么?

谢谢


如果你只是在这样的控制器动作中抛出异常,那么就没有一种友好的方式让它们回到前端。如果您注意到,最终将使用默认模板中的页面html进行例外处理。

另一方面,我不相信这是一个很好的做法,因为你只是扔掉它们来回复消息。

另一个问题解释了从ASP.NET MVC控制器处理"错误"的好方法。

ASP净MVC-Ajax的错误处理


尝试改变你这样的代码,

1
2
3
4
5
6
error: function (xhr, status, error) {
    alert('error: ' + xhr.statusTexterror);
},
success: function (response) {
    alert('resp: ' + response);
}

更新

以下是xhr中的属性/方法

  • readyState的
  • 状态
  • 状态文本
  • 当底层请求分别用xml和/或文本响应时,responseXML和/或responseText
  • setRequestHeader(name,value),它通过将旧值替换为新值而不是将旧值与旧值相连接而脱离标准
  • getAllResponseHeaders()
  • getResponseHeader()
  • 的StatusCode()
  • 中止()