ЕСЛИ оператор не выполняется C # MVC - PullRequest
1 голос
/ 20 декабря 2010

У меня есть приложение MVC, которое имеет две области - Администратор и Пользователь.То, что я хотел сделать, это при первом входе в систему, пользователь активирует свою учетную запись, соглашается с условиями и т. Д. Это приложение использует API-членство ASP.

Я вставил оператор IF в действие входа POST в контроллере учетной записи, однако после отладки выясняется, что оператор if никогда не выполняется.Если бы кто-то мог взглянуть на это, я был бы очень благодарен.Я чувствую, что это может быть что-то маленькое, что мне не хватает.

URL-адрес для входа пользователя:

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

URL администратора:

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);
        }

Кажется, что здесь пропускается только что-то другое:

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

ипереходит прямо к финальному действию RedirectToAction.

Буду очень признателен, если кто-нибудь сможет что-то заметить.Если нужна дополнительная информация, просто кричите!

Ответы [ 2 ]

3 голосов
/ 20 декабря 2010

Это не будет дальше, чем в случае, если 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 для ясности:

if (string.IsNullOrEmpty(returnUrl))
{
    // do the default cases
}
else
{
    // redirect to returnUrl
}
0 голосов
/ 20 декабря 2010

Это не так - из вашего кода returnUrl всегда будет содержать строку, поэтому он выполнит первую часть вашего условного оператора и просто вернет перенаправление - он никогда не попадет в ваш первый пользовательский код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...