0

我正在尝试在用户第一次登录时执行用户验证。如果用户尚未经过验证,那么我将其userid从代码发送到回调方法,并在回调中使用重定向到另一个页面

(window.location.href = "/verifyuser?id=" + response.userId)

但是我不希望这样。相反,我想对带有值的 url 进行 ajax 调用。我不希望 userId 在 url 中可见。我尝试使用

$.ajax({

     type:"POST"        
     url:"/verifyuser",
     data:{id:response.userId},
     async:false
});

但它没有用。我的服务器端代码如下(我使用的是 mvc 4)

    [HttpGet]
    public ActionResult VerifyUser(string id)
    {           
        ViewBag.Id = id;
        return View("~/Views/User/VerifyUser.cshtml");
    }

我的js代码如下:

var postObj = {

            url: "Home/Login",
            data: {},
            callback: function (status, response) {
                if (response.status === 400) {
                    var errors = response.errors;
                    var serverValidate = new PS.Validate(userObj);
                    var isvalid = serverValidate.showErrors(errors);
                }
                else {

                    if (response.userId !== null && response.userId !== undefined) {

                        window.location.href = "/verifyuser?id=" + response.userId;
                    }
                    else {
                        window.location.href = "/user-dashboard";
                    }
                }
            }
        };
me.fm.post(postObj);

有没有办法在有或没有 Ajax 的情况下做到这一点?谢谢。

4

2 回答 2

1

如果您不想进行 ajax 调用,则可以在控制器中返回 RedirectToAction ActionResult,但您必须确保页面执行实际表单发布而不使用 ajax

于 2013-10-16T14:18:52.213 回答
0

如果您将 AJAX 请求更改为 POST,您还必须允许控制器操作响应 POST 请求。

[HttpPost]
public ActionResult VerifyUser(string id)
{           
    ViewBag.Id = id;
    return View("~/Views/User/VerifyUser.cshtml");
}
于 2013-10-16T14:14:11.403 回答