gpt4 book ai didi

asp.net - 为什么 Request.IsAjaxRequest() 在 ASP.NET MVC 3 中不起作用?

转载 作者:行者123 更新时间:2023-12-04 23:30:58 26 4
gpt4 key购买 nike

我正在使用 Razor 创建一个新项目 asp.net mvc3,并希望将 LogOn 转换为 ajax 请求。

HTML

@using (Ajax.BeginForm("LogOn", "Account", new AjaxOptions { HttpMethod="post", OnSuccess="LoginSubmitted"}))
{
}

Controller
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 header 。所以我添加
<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />

这似乎有效,但现在我收到的是一个 Json 对象,它没有被解析,而是谷歌浏览器只是通过发送回应用程序/json 文档来将 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();
}
}

以我自己的创作形式,使用标准助手可以正常工作。

发生了什么?

最佳答案

这是因为默认情况下 ASP.NET MVC 3 使用 jQuery 和不显眼的 AJAX,而不是 MicrosoftAjax* 库。这意味着当你写 Ajax.BeginForm您需要在页面中包含正确的脚本:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

并在您的 web.config 中确保您启用了不显眼的 javascript:
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

现在您可以放心地扔掉所有 MicrosoftAjax*如果您有任何页面上的脚本引用,它们将不再使用。

就我个人而言,我从未使用过任何 Ajax.* helper 。我总是喜欢控制。所以我会写:
@using (Html.BeginForm("LogOn", "Account"))
{
}

然后使用 jquery form plugin 对该表单进行 AJAX 化:
$(function() {
$('form').ajaxForm(function(result) {
alert('form successfully submitted');
});
});

关于asp.net - 为什么 Request.IsAjaxRequest() 在 ASP.NET MVC 3 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com