Friday, 3 June 2016

Validate controller with session and redirect again to left page mvc

No comments
HTML

<body>

    <section class="content" style="width: 50%;margin-left: 25%;margin-top: 50px;">
        <div class="row">          
            @if (TempData["Signup"] == "success")
            {
                <div class="alert alert-success  alert-dismissible" style="margin-top: 5px">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>                            
                    Signup success , please login to continue..
                </div>
            }
            else
            {
                <div class="alert alert-success  alert-dismissible" style="margin-top: 5px;visibility:hidden">                  
                    &nbsp;
                </div>
            }
        </div>
    </section>

    <div class="login-card">
        <h1>Log-in</h1><br>
        <form action="@Url.Action("Login","Home")@(Request.QueryString["ReturnUrl"] != null ? "?"+Request.QueryString : "")" method="post">
            @Html.TextBoxFor(x => x.emailid, new { placeholder = "Email", maxlength = "50", tabindex = "1", @class = "form-control" })
            @Html.TextBoxFor(x => x.password, new { placeholder = "Password", type="password",maxlength = "50", tabindex = "2", @class = "form-control" })          
            <button name="login" class="login login-submit">Login</button>
        </form>
        <div class="login-help">
            <a href="@Url.Action("UserRegistration","Home")">Register</a> • <a href="#">Forgot Password</a>
        </div>
        @if (ViewContext.ViewData.ModelState.ContainsKey("Error") || ViewContext.ViewData.ModelState.ContainsKey("Login"))
        {
            <div class="alert alert-danger alert-dismissible" style="margin-top: 5px">
                <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                @Html.ValidationSummary(false)
            </div>
        }
     
    </div>

</body>



Controller

SessionFactory.cs 

to store session

   public class SessionFactory
    {
        private static SessionFactory _SessionFactory = new SessionFactory();

        public SessionFactory()
        {

        }

        public static SessionFactory Instance
        {
            get
            {
                return _SessionFactory;
            }
        }

        public Users CurrentUsers
        {
            get
            {
                if (HttpContext.Current.Session["Users"] == null)
                {
                    return null;
                }
                return (Users)HttpContext.Current.Session["Users"];
            }

            set
            {
                HttpContext.Current.Session["Users"] = value;
            }
        }
    }


ValidateUserAttribute.cs

attribute to validate

 public class ValidateUserAttribute: ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {          
            if (SessionFactory.Instance.CurrentUsers == null)
                filterContext.Result = new RedirectResult(string.Format("/Home/Login?ReturnUrl={0}",HttpUtility.UrlEncode(filterContext.HttpContext.Request.Url.AbsolutePath)));          
        }
    }


Property

to check querystring

 private string ReturnUrl
        {
            get
            {
                if (Request.QueryString["ReturnUrl"] != null)
                {
                    return Request.QueryString["ReturnUrl"];
                }
                return string.Empty;
            }
        }

When Login

if querystring found than redirect to that url

      [HttpPost]
        public ActionResult Login(Users users)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("Error", "");
                return View(users);
            }
         
            SessionFactory.Instance.CurrentUsers = userData;
            if (!string.IsNullOrEmpty(ReturnUrl))
            {
                return RedirectPermanent(ReturnUrl);
            }
            else
                return RedirectToAction("Dashboard", "Dashboard");
        }


Validate controller


  [ValidateUser]
    public class MyController : Controller
    {
    }