我从一个jQuery AJAX调用向一个MVC4控制器发送登录信息:
$.post(url, data, function (response) {
if (response=='InvalidLogin') {
//show invalid login
}
else if (response == 'Error') {
//show error
}
else {
//redirecting to main page from here for the time being.
window.location.replace("http://localhost:1378/Dashboard/Index");
}
});
如果登录成功,我希望根据用户类型将用户从服务器端重定向到相应的页面。如果登录失败,则会将一个字符串发送回user:
[HttpPost]
public ActionResult Index(LoginModel loginData)
{
if (login fails)
{
return Json("InvalidLogin", JsonRequestBehavior.AllowGet);
}
else
{
// I want to redirect to another controller, view, or action depending
// on user type.
}
}
但也有一些问题:
not all code paths return a value
.有没有什么技术可以处理这样的场景?
发布于 2013-11-06 01:50:48
return
通常从方法返回,而不执行任何其他语句,因此不需要else
部件。这样你就可以摆脱第一个问题了。
至于重定向,为什么不返回某种重定向命令:
[HttpPost]
public ActionResult Index(LoginModel loginData)
{
if (login fails)
{
return Json(new {result = "InvalidLogin"}, JsonRequestBehavior.AllowGet);
}
return Json(new {result = "Redirect", url = Url.Action("MyAction", "MyController")});
}
然后在javascript中:
$.post(url, data, function (response) {
if (response.result == 'InvalidLogin') {
//show invalid login
}
else if (response.result == 'Error') {
//show error
}
else if (response.result == 'Redirect'){
//redirecting to main page from here for the time being.
window.location = response.url;
}
});
发布于 2016-03-21 19:00:41
这对我有帮助。
return JavaScript("window.location = '/'");
参考链接How to get an ASP.NET MVC Ajax response to redirect to new page...
发布于 2016-10-24 04:06:16
我不得不这样做,但我发现没有一个解决方案真正满足了我对JavaScript解析错误的极端要求,为了将客户端重定向到登录页面,我必须避免这些错误。
我所做的是从我的自定义Authorization属性发送一个简单的"NOAUTH“字符串响应,然后在命中任何事件处理程序之前拦截Ajax响应,并通过设置window.location来重定向用户。
服务器端:
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.RequestContext.HttpContext.Request.IsAjaxRequest())
{
var result = new ContentResult {Content = "NOAUTH"};
context.Result = result;
return;
}
}
然后在客户端:
$.ajaxSetup({
dataFilter: function (data, type) {
if (data !== "" && data === "NOAUTH") {
window.location = '/';
}
return data;
}
});
不过,我不建议使用这种方法。如果您必须这样做,那么我至少建议您将"NOAUTH“值放入http响应头中,然后在全局JQuery complete处理程序中读取该值。
服务器端:
HttpContext.Current.Response.AddHeader("NOAUTH", "1");
客户端:
$.ajaxSetup({
complete: function (jqXHR, textStatus) {
if (jqXHR.getResponseHeader("NOAUTH") === '1')
window.location = '/';
}
});
请注意,在命中任何其他事件处理程序之前,使用dataFilter是惟一的方法来拦截ajax请求。
https://stackoverflow.com/questions/19795198
复制相似问题