尝试使用MVC Ajax助手时遇到了一个奇怪的问题。我在jquery本身制作ajax帖子没有问题,但我想避免手动获取所有表单参数。
症状
而不是我的OnSuccess函数运行asp实际上像我这样渲染我的Json对象
以下是我的代码的关键代码段。我必须失去一些微不足道的东西。
查看
@using (Ajax.BeginForm("ParkingRequest", null, new AjaxOptions()
{
HttpMethod = "POST",
OnSuccess = "SaveComplete",
}, new { @class = "form-horizontal", role = "form" }))
{
Javascript
function SaveComplete(result)
{
if(result.success == true)
{
$("#confirmation-message").fadeIn();
}
else
{
if(result.reason != "You should only be selecting one date.")
{
$("#failure-message").fadeIn();
}
else
{
//user somehow bypassed javascript and tried to enter multiple dates
alert(result.reason);
}
}
}
控制器
public async Task<JsonResult> ParkingRequest(Models.FormsViewModels.ParkingRequestEditViewModel vm)
return Json(new
{
success = true
});
答案 0 :(得分:1)
我知道这是旧的,但我最近遇到了同样的问题。我假设你现在已经找到了合适的解决方案,但是我会把它留在这里以防万一其他人遇到类似的东西。
您是如何提交表格的?在我的情况下,我希望表单在任何更改时提交(在这种情况下,表单只有几个复选框)我的问题是我试图通过javascript提交表单,如下所示:
perl -S scan-build %*
无论出于何种原因,如果通过javascript触发,似乎不引人注意的ajax库不会异步提交表单。但是,如果通过HTML提交按钮触发,它将 异步提交。
要为我的用例解决此问题,我在表单中添加了一个隐藏的提交按钮,并将我的javascript更改为单击onchange:
<input type="checkbox" onchange="this.form.submit();" ... />
瞧! AJAX助手现在实际上是异步提交的。是的,我知道它有点hacky但它对我有用。
答案 1 :(得分:0)
表单实际上是在提交非异步POST请求。 javascript没有拦截它。
检查您是否包含了必要的jQuery库,并且没有抛出任何javascript错误。
答案 2 :(得分:0)
你可能会丢失包括jquery.unobtrusive-ajax.js文件或渲染jqeryval试试这个
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
或_Layout.cshtml
@Scripts.Render("~/bundles/jqueryval")
Async方法应该是
public async Task<JsonResult> ParkingRequest(Models.FormsViewModels.ParkingRequestEditViewModel vm)
{
// do stuff here....
var result = await Task.Run(() =>
{
return Json(new { success = true });
});
return result;
}
另一方面,你最终会发出警告。
但我建议你只使用Ajax Jquery请求。
希望它能帮到你
答案 3 :(得分:0)
确保您已将以下脚本包含在您的页面中:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
并且您已在web.config中启用了不显眼的javascript:
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
这使得像Ajax.BeginForm这样的Ajax。*助手能够正常工作。