IF语句没有被执行C#MVC

时间:2010-12-20 14:29:58

标签: c# asp.net-mvc if-statement

我有一个MVC应用程序,它有两个区域 - 管理员和用户。我想要做的是,首次登录时,用户将激活他们的帐户,同意条款和条件等。此应用程序使用asp会员api。

我已将一个IF语句插入到Account控制器的POST登录操作中,但是在调试之后,似乎永远不会执行此if语句。如果有人可以看一下,我会非常感激。我觉得这可能是我想念的小事。

用户的登录URL为:

  

http://localhost:80/Account/LogOn?ReturnUrl=/User

管理员网址为:

  

http://localhost:80/Account/LogOn?ReturnUrl=/Administrator

但是两者都在帐户控制器中使用相同的登录操作,因此需要使用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。

如果有人能发现任何事情,我将非常感激。如果需要更多信息,请大声喊叫!

2 个答案:

答案 0 :(得分:3)

这不会比returnUrl == "/User"或任何其他值

的if情况更进一步
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将始终包含一个字符串,因此它将运行条件语句的第一部分,并且只返回重定向 - 它将永远不会达到您第一次用户代码。