我有简单的页面:
<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;)
答案 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%肯定,但我答案的第一部分肯定适合你。