void ActionMethod 调用使用 ajax post 请求与验证令牌覆盖页面,将其变为空白.怎么来了?



我正在尝试在不影响视图的情况下调用操作方法。我调用以下操作方法

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public void Index(LoginModel login)//, string returnUrl)
{
if (ModelState.IsValid && 
System.Web.Security.Membership.ValidateUser(login.UserName, login.Password))
{
FormsAuthentication.SetAuthCookie(login.UserName, login.RememberMe);
login.JavascriptToRun = "updateForm()";
}
// handle error
}

通过这样做

$('#loginBtn').click(function () {
var success = false;
var form = $('#loginForm');
var token = $('input[name="__RequestVerificationToken"]', form).val();
$.ajax({
url: $(this).data('url'),
type: 'POST',
data: {
__RequestVerificationToken: token,
LoginModel: "@Model"
},
success: function (result) {
alert("logged in");
}
});
});

该表单位于一个单独的视图中,该视图还包含上面的 JS 代码片段。

一切正常,除了整个页面重新加载,并且由于操作方法无效,因此结果为空白。我不希望网页发生任何事情,只想更改存储在模型中的 js 代码片段,BTW 目前是一个空函数。

我看过相关帖子,例如 ASP.NET MVC - 如何在不离开视图的情况下调用 void 控制器方法? 但我一点也不聪明。

感觉就像我碰壁了,其他人的意见将不胜感激。干杯!

您可以使用 ActionResult 作为 Index() Action 的数据类型,并使用 View() 将 javascript 返回到其中。(返回 JavaScriptResult())

也看看这个: JavaScriptResult在 asp.net mvc中的工作示例

最新更新