【问题标题】:IF statement not being executed C# MVCIF 语句未执行 C# MVC
【发布时间】:2010-12-20 14:29:58
【问题描述】:

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

我在 Account 控制器的 POST 登录操作中插入了一个 IF 语句,但是在调试之后,似乎这个 if 语句从未执行过。如果有人可以看看它,我将不胜感激。我有一种感觉,它可能是我缺少的一些小东西。

用户的登录网址是:

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

管理员网址是:

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

但是两者都在帐户控制器中使用相同的登录操作,因此需要使用 if 语句来区分两者。

这是 POST Logon 操作的代码。字符串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);
        }

这里似乎只是在 else 之后跳过:

if (!String.IsNullOrEmpty(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        string url = returnUrl;

然后直接跳到最后的 RedirectToAction。

如果有人能发现任何东西,我将不胜感激。如果需要更多信息,请大声喊叫!

【问题讨论】:

  • 您可能想要更改您的问题标题。听起来你破坏了编译器。 ;)

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


【解决方案1】:

这不会比 returnUrl == "/User" 或任何其他值时的 if 情况更进一步

if (!String.IsNullOrEmpty(returnUrl))
{
    return Redirect(returnUrl);
}

If not is null or empty,如果returnUrl == "/User",这是真的,因为"/User" 不为空且不为空。

您的第二部分将始终为 null 或为空:

string url = returnUrl;

if (url == "/User")
{

所以这将“出现”就像某些东西不起作用一样。

为了清楚起见,我的建议是首先在 if/else 中返回“真”情况:

if (string.IsNullOrEmpty(returnUrl))
{
    // do the default cases
}
else
{
    // redirect to returnUrl
}

【讨论】:

    【解决方案2】:

    它没有 - 从您的代码中,returnUrl 将始终包含一个字符串,因此它将运行您的条件语句的第一部分,并仅返回重定向 - 它永远不会遇到您的第一次用户代码。

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      相关资源
      最近更新 更多