Asp.Net MVC ReturnUrl
Genellikle Üyelik Girişi sonrası kullanılan bu sistem oldukça basit, ancak BeginForm’un hatalı kullanıldığı durumlarda çalışmama ihtimali bulunmakta.
Basit bir örnek ile durumu açıklamaya çalışalım.
View
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] }, FormMethod.Post)) { @ViewBag.Message <input type="text" autocomplete="off" placeholder="Kullanıcı Adı" name="UserName"/> <input type="text" autocomplete="off" placeholder="Şifre" name="Password"/> <button type="submit" >GİRİŞ</button> }
Controller
[HttpPost] public ActionResult Login(string UserName, string Password, string ReturnUrl) { if (Membership.ValidateUser(UserName, Password)) { FormsAuthentication.SetAuthCookie(UserName, false); if (!string.IsNullOrEmpty(ReturnUrl)) return Redirect(ReturnUrl); else return RedirectToAction("Index", "Admin"); } ViewBag.Message = "Kullanıcı adı ve/veya şifre hatalı. Lütfen bilgileri kontrol edin."; return View(); }
Yukarıda senaryoda Query’den aldığımız değeri controller içerisinde kontrol ederek değerin boş olmaması durumunda belirtilen sayfaya yönlendirilmesini sağlamış olduk. Burada dikkat edilmesi gereken husus, yazının başında da belirtmiş olduğum gibi BeginForm kullanımının doğru yapılması olacaktır.
@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { ReturnUrl = Request.QueryString["ReturnUrl"] }))
Yukarıdaki şekilde kullandığınız takdirde ReturnUrl değerinin her zaman null döndüğünü göreceksiniz.
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] }))
Aynı şekilde Method özelliğini kullanmadığınız durumda da ReturnUrl değeri dönecektir ancak “Enter” tuşu ile post etmeye eldeva diyebilirsiniz…