我将创建一个新项目,使用Razor的asp.net mvc3,并希望将LogOn转换为ajax请求。
HTML
在我自己创建的表单中,使用标准辅助工具可以很好地运作。
发生了什么?
HTML
@using (Ajax.BeginForm("LogOn", "Account", new AjaxOptions { HttpMethod="post", OnSuccess="LoginSubmitted"}))
{
}
控制器
if (Request.IsAjaxRequest())
{
return Json(new { ResultMessage = "Username or password provided is incorrect"});
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
其它的内容保持不变。
首先,通过使用Fiddler查看http响应,我发现没有x-requested-with头信息。因此我添加了
<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />
看起来这个方法可以用,但现在我收到的是一个Json对象,而不是被解析过的。Google Chrome只是将Json作为application/json文档发送回屏幕进行呈现。所有的脚本都已经准备好了。
我也尝试了以下操作:
@using (Ajax.BeginForm("Submit", "home", new AjaxOptions { HttpMethod = "Post", OnSuccess="LoginSubmitted"}))
{
}
@section head
{
<script type="text/javascript">
function LoginSubmitted(res) {
alert(res.Message);
}
</script>
}
public ActionResult Submit(string id)
{
if (Request.IsAjaxRequest())
{
return Json(new { Message = "Logged In" } );
}
else
{
return View();
}
}
在我自己创建的表单中,使用标准辅助工具可以很好地运作。
发生了什么?
jquery.unobtrusive-ajax.js
不会包含在页面中。它在Scripts
文件夹中,但未被包含,这意味着没有任何东西可以将您的Ajax.BeginForm
助手转换为AJAX,因此它只会发送普通的HTTP请求。顺便说一下,如果您使用FireBug,您应该已经看到了。 - Darin DimitrovX-Requested-With
的隐藏字段似乎是一个可怕的hack。如果请求确实是AJAX或者您遇到了一些JavaScript错误,请尝试使用FireBug查看。Fiddler在这方面并不好,因为您只能看到HTTP请求,但无法真正区分它们。 - Darin Dimitrov