0

这是我的看法

 <div>
    @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" />
    }
</div>

<script>

    $(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);
                }
            });
        });


    });

 </script>

这是表单发布到的 Home 控制器的方法:

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

当我提交表单时,我在警报框中得到一个“resp:undefined”。如何将文本“发布的名称是:....”返回到成功发布的视图?

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

[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);
}

我收到消息“错误:内部服务器错误”。我想在错误中返回消息的文本,如下所示:'error: custom error string from action' 这样做的方法是什么?

谢谢

4

2 回答 2

2

尝试像这样更改您的代码,

error: function (xhr, status, error) {
    alert('error: ' + xhr.statusTexterror);
},
success: function (response) {
    alert('resp: ' + response);
}

更新


以下是中的属性/方法xhr

  • 就绪状态
  • 地位
  • 状态文本
  • 当底层请求分别以 xml 和/或文本响应时的 responseXML 和/或 responseText
  • setRequestHeader(name, value) 通过用新值替换旧值而不是将新值连接到旧值而偏离标准
  • getAllResponseHeaders()
  • 获取响应头()
  • 状态码()
  • 中止()
于 2013-06-26T17:11:16.080 回答
2

如果您只是在这样的控制器操作中抛出异常,则没有一种友好的方法可以让它们返回到前端。如果您注意到,您最终会得到默认模板中的页面 html 以用于异常。

另一方面,我认为这不是一个好习惯,因为您只是将它们扔掉以获取消息返回。

在另一个问题中解释了处理来自 ASP.NET MVC 控制器的“错误”的好方法。

asp-net-mvc-ajax-错误处理

于 2013-06-26T21:11:18.077 回答