MVC'de Ajax.BeginForm Kullanmak

Ramazan Arslantürk Ramazan Arslantürk
29.05.2016 03:38


Web site projelerinde, formadaki elemanların durumuna göre, bazı kontrollerin yapılması gerekebilmektedir. JQuery ile istemci tarafında birçok kontrolü yapmak mümkün olabilmektedir. Ama bazı kontroller, mutlaka sunucu tarafında yapılması gerekmektedir.

Kullanıcı sayfasında, girilen Kullanıcı Adı'nın veya e-posta adresinin daha önce sisteme kayıt edilip edilmediğini anlamak için veritabanından sorgulanması gerekmektedir. Bu bilgiler, sisteme daha önce kaydedilmişse ziyaretçiye mesaj verilmesi gerekir.

Kullanıcı sayfası için iki durum ortaya çıkabilmektedir.

  • Girilen Kullanıcı Adı sistemde kayıtlı olabilir ve bu Kullanıcı Adı ile başka birisi üye olmuş olabilir.
  • Ziyaretçi, aynı Kullanıcı Adı ile sisteme daha kayıt olmuş olabilir.

Her iki durumu göz önüne alarak, girilen bilgilerin vertabanında sorgulanması ve ziyaretçiye mesaj olarak bilgi verilmesi şarttır.

Gerçekten ziyaretçinin girdiği Kullanıcı Adı ve e-posta, ziyaretçiye ait ise ve tekrar üye olmak istiyorsa, şöyle bir mesaj verilebilir:

Bu Kullanıcı Adı ya da e-posta adresi sistemde kayıtlıdır:

  • Eğer daha önce sitemize üye olduysanız, sisteme Giriş yapınız.
  • Eğer şifrenizi hatırlamıyorsanız, Şifremi Unuttum'a tıklayarak şifrenizi yenileyiniz.
  • Eğer, sitemize daha önce üye olmadıysanız, farklı bir kullanıcı adı giriniz.

Şimdi Kayıt sayfamızı codelamaya başlayalım.

MVC projesinde, sayfanın tekrar yenilenmemesi ve hızlı çalışabilmesi için Ajax kullanacağız. Model, Conroller ve View kodlarımı oluşturdum ve denemeleri yapmaya başladım. Ama bir türlü kontrol, Code Behind'a düşmüyordu.

View : Register.cshtml

@model Admin.Models.RegisterModel
@{<br>ViewBag.Title = "Kayıt";<br> }<br> <section class="column2" style="margin-bottom:50px;"><br> @using (Ajax.BeginForm("Register", "Account", FormMethod.Post, new AjaxOptions { OnSuccess = "success", LoadingElementId = "loading" }))<br> {<br> @Html.AntiForgeryToken()<br> <div id="rec"><br> @Html.TextBoxFor(m => m.UserName, new { @class = "tbox", placeholder = Html.DisplayNameFor(n => n.UserName) }) <br /> @Html.TextBoxFor(m => m.Name, new { @class = "tbox", placeholder = Html.DisplayNameFor(n => n.Name) }) <br /> @Html.TextBoxFor(m => m.SurName, new { @class = "tbox", placeholder = Html.DisplayNameFor(n => n.SurName) }) <br /> @Html.TextBoxFor(m => m.Email, new { @class = "tbox", placeholder = Html.DisplayNameFor(n => n.Email) }) <br /> @Html.PasswordFor(m => m.Password, new { @class = "tbox", placeholder = Html.DisplayNameFor(n => n.Password) }) <br /> @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "tbox", placeholder = Html.DisplayNameFor(n => n.ConfirmPassword) }) <br /> <input type="submit" value=" Kaydet " class="buttonx" /><br> </div><br> <div id="msg"></div><br> }<br> </section><br> @section scripts{<br> @Scripts.Render("~/bundles/jquery-unobtrusive")<br> <script type="text/javascript"><br> function success(result) {<br> if (result.success == true) {<br> $("form")[0].reset();<br> $('#rec').hide();<br> $("#msg").html(result.message);<br> }<br> else {<br> $("#msg").html(result.message);<br> }<br> }<br> </script><br> }<br>

Model : JsonResultModel.cs

public class JsonResultModel
{
public bool success { get; set; }
public string message { get; set; }
}

Controller : AccountController.cs

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Register(RegisterModel model)
{
JsonResultModel jModel = new JsonResultModel();
if (ModelState.IsValid)
{
jModel.success = true;
jModel.message = "Kaydınız başarı ile yapılmıştır.";
...
...
}
else
{
jModel.success = false;
jModel.message = "Lütfen, tüm alanları doldurunuz!";
}
return Json(jModel, JsonRequestBehavior.AllowGet);
}

Ayax'sın devreye girebilmesi için,
@Scripts.Render("~/bundles/jquery-unobtrusive")
kullanılması gerekmektedir.

Admin Akademi
Kendinizi Geleceğe Hazırlayın