我有一个MVC应用程序,它有两个区域 - 管理员和用户。我想要做的是,首次登录时,用户将激活他们的帐户,同意条款和条件等。此应用程序使用asp会员api。
我已将一个IF语句插入到Account控制器的POST登录操作中,但是在调试之后,似乎永远不会执行此if语句。如果有人可以看一下,我会非常感激。我觉得这可能是我想念的小事。
用户的登录URL为:
管理员网址为:
但是两者都在帐户控制器中使用相同的登录操作,因此需要使用if语句来区分这两者。
以下是POST登录操作的代码。字符串returnUrl是“/ User”而不是“User”,我通过代码调试后发现它。
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
string url = returnUrl;
if (url == "/User")
{
ModelContainer ctn = new ModelContainer();
MyApp.Data.User p = ctn.Users.First(t => t.UserID == UserServices.CurrentUserId);
string status = p.AccountStatus;
if (status != "Active")
{
return RedirectToAction("contract", "Home");
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
它似乎在其他地方之后跳过:
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
string url = returnUrl;
然后跳到最后的RedirectToAction。
如果有人能发现任何事情,我将非常感激。如果需要更多信息,请大声喊叫!
答案 0 :(得分:3)
这不会比returnUrl == "/User"
或任何其他值
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
If not is null or empty
,如果returnUrl == "/User"
,则为真,因为"/User"
不为空并且不为空。
,你的第二部分将永远为空或空:
string url = returnUrl;
if (url == "/User")
{
所以这会“出现”,就像某些东西不起作用。
我的建议是首先在if / else中返回“true”案例,以便明确:
if (string.IsNullOrEmpty(returnUrl))
{
// do the default cases
}
else
{
// redirect to returnUrl
}
答案 1 :(得分:0)
它没有 - 从您的代码中,returnUrl将始终包含一个字符串,因此它将运行条件语句的第一部分,并且只返回重定向 - 它将永远不会达到您第一次用户代码。