AspNetMvc中的Ajax错误请求

时间:2014-09-18 15:39:53

标签: c# jquery ajax asp.net-mvc asp.net-ajax

我有简单的页面:

<div style="width:600px; margin-left:auto; margin-right:auto">
    <div style="background-color: lightgray">
        <h2>My Products</h2>
    </div>
    <p>Click the button to Get Products with an Ajax call</p>

    <input id="btnAjax" name="btnAjax" type="button" value="Get Products" />
    <div id="products" style="background-color:lightskyblue">
        <div id='loadingmessage' style='display:none'>
            loading...
        </div>
    </div>
</div>

和部分脚本:

@section Scripts {
        @*@Scripts.Render("~/bundles/jqueryval")*@
    <script>
        $('#btnAjax').click(function () {
            $.ajax({
                url: '/Test/GetProducts',
                contentType: 'application/html; charset=utf-8',
                data: { id: 1 },
                type: 'GET',
                dataType: 'html'
            })     
            .success(function (result) {
                $('#products').html(result);
                $('#loadingmessage').hide();
            })
            .error(function (xhr, status, throwError) {
                alert(status);
            })           
        });
        </script>
    }
TestController中的

方法名称GetProducts(int id):

    public PartialViewResult GetProducts(int id)
    {
        var listOfCourses = db.Courses.ToList();
        Task.Delay(9000000);
        if(id == 1)  
            throw new Exception("something bad");

        return PartialView("_GetProducts", listOfCourses);
    }

有没有办法设置&#39; id&#39;在按钮(#btnAjax)中并将其扔到ajax脚本?例如:

<input id="btnAjax" name="btnAjax" type="button" value="Get Products" data:id="1" />

然后在ajax脚本中读取它

data: { id: $(this).id

...

第二个问题是如何在错误事件中从异常中获取消息错误(&#34;不好的事情&#34;)

1 个答案:

答案 0 :(得分:1)

将其设置为数据属性,例如data-id

<input id="btnAjax" name="btnAjax" type="button" value="Get Products" data-id="1" />

并阅读它,您可以使用以下任何一种:

$("input#btnAjax").attr("data-id")

$("input#btnAjax").data("id")

第二种选择是最新的方式。

编辑:

对于第二个问题,您需要返回JSON,例如

public ActionResult GetProducts(int id)
{
    var listOfCourses = db.Courses.ToList();

    Task.Delay(9000000);

    if (id == 1)
    {
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        return Json(new { ErrorMessage = "Test" }, JsonRequestBehavior.AllowGet);
    }

    return PartialView("_GetProducts", listOfCourses);
}

我认为上述情况应该有效(我自己没有机会尝试过)。通过将状态代码设置为错误代码(而不是200状态正常),您应该在JavaScript中的AJAX代码中点击error函数。

我对这一点并不是100%肯定,但我答案的第一部分肯定适合你。