2015-05-23 7 views
1

У меня есть следующая проблема с использованием asp.net MVC: когда администратор обновляет запрос пользователя, он получит сообщение электронной почты, в котором говорится, что запрос был обновить и в этом письме появится ссылка на страницу http://www.domain.com/request.ASP.NET MVC Перенаправить на целевую страницу или перенаправить на предыдущую страницу после входа в систему

Для доступа к этой странице пользователь должен войти в систему, чтобы ссылка перенаправилась на страницу входа. После входа пользователь перенаправляется на http://www.domain.com/welcome, , как я могу сделать, чтобы перенаправить на адрес, отправленный по электронной почте после входа?

[HttpPost] 
public ActionResult Login(LoginModel model, string returnUrl, bool createPersistentCookie) 
{ 
    // Check if the Model is valid or not 
    if (ModelState.IsValid) 
    { 
     using (GNEntities entities = new GNEntities()) 
     { 
      string username = model.Email; 
      string password = model.Password; 

      // Now if our password was enctypted or hashed we would have done the 
      // same operation on the user entered password here, But for now 
      // since the password is in plain text lets just authenticate directly 


      bool userValid = entities.Employee.Any(user => user.Email == username && user.Password == password && user.IsActive ==true); 

      // User found in the database 
      if (userValid) 
      { 

       FormsAuthentication.SetAuthCookie(username, createPersistentCookie); //false:not persistent cookie 

       Employee e = (Employee)entities.Employee.FirstOrDefault(user => user.Email == username); 


       if (e.Roles.Id==1 || e.RoleId == 3) // 3 = commercial 
       { 
        return RedirectToAction("Index", "AdminIndex", new { Area = "AdminArea" }); 
       } 
       else if (e.Roles.Id == 2 || e.Roles.Id ==4) 
       { 
        int countryId = e.CountryId; 
        return RedirectToAction("Index", "Calendar", new { year = DateTime.Now.Year, countryId, Area = "EmpArea" });//with paramenters RedirectToAction("Index", new { id = currentcoupon.Companyid.id, Area="Admin" }); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The email or password provided is incorrect or your account has been disabled."); 
      } 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 

Я попытался это, но не работает:

if (returnUrl == null) 
{ 
    int countryId = e.CountryId; 
    return RedirectToAction("Index", "Calendar", new { year = DateTime.Now.Year, countryId, Area = "EmpArea" }); 
} 
else 
{ 
    return RedirectToAction(returnUrl, new {Area = "EmpArea"}); 
} 

В результате до сих пор не очень хорошо: Это гиперссылка перед входом domain.net/Login/Login?ReturnUrl=%2fEmpArea%2fTimesheet

и после входа в систему он генерирует этот адрес domain.net/EmpArea/Login/EmpArea/Timesheet

Он поддерживает зону входа. Я не знаю почему.

+0

Может быть, показать нам свой код входа в систему? – DavidG

+1

В вашем логинном коде после входа вы перенаправляете пользователя в AdminIndex или Calendar. Вместо этого попробуйте использовать параметр returnUrl. – DavidG

+0

Привет, Дэвид, я добавил RedirectToAction (returnURL, new = {Area = "EmpArea"}), но у меня все еще есть и ошибка. Это url перед login domain.net/Login/Login?ReturnUrl=%2fEmpArea%2fTimesheet и после входа в систему он генерирует этот url domain.net/EmpArea/Login/EmpArea/Timesheet – Natalia

ответ

0

В вашем логинном коде после успешной проверки учетных данных вы перенаправляете пользователя на AdminIndex или Calendar. Обратите внимание, что действие Login имеет параметр returnUrl, который вы можете использовать.

Таким образом, после успешного входа в систему, проверьте параметр не является пустым и redirect пользователя к этому URL:

if(!string.IsNullOrEmpty(returnUrl)) 
    return Redirect(returnUrl); 
+0

Большое спасибо DavidG – Natalia

Смежные вопросы