ASP.NET MVC 3 Razor İpuçu 1 – DropDownList’ten Selected Change Anında Action Çağırma

asp-net-MVC3 Merhaba MVC Severler, “ASP.NET MVC 3 Razor ile Uygulama Geliştirme Yazı Dizi”sine devam ediyorum. Aynı zamanda aklıma geldikçe ipuçları paylaşacağım sizlerle. Biliyorsunuz MVC’de Server kontrolleri yok dolayısıyla post back mekanizması da yok. Bu yüzden DropDownList kullanacağımız zaman DropDownList’ten seçili olan öğeyi değiştirdiğinizde arkada çalışacak herhangi bir event bulunmamaktadır. Senaryo DropDownList’e (Select List) şehirlerimi ekledim ve şehir seçimi değiştiği anda Home Controller içerisindeki City Action’ına parametre olarak şehir id’sini yollasın. Çözüm

Yöntem 1: İmdatımıza javascript kodları eventleri yetişiyor. Burada “ddlSehirleri” bir form içerisinde alıyoruz ve change anında içerisinde olduğu formu tetikletmek: HomeController.cs

        public ActionResult City(string ddlSehirler)
        {
            List<Sehir> sehirler = new List<Sehir>();

            sehirler.Add(new Sehir() { sehirID = 1, sehirAdi = "Adana" });
            sehirler.Add(new Sehir() { sehirID = 6, sehirAdi = "Ankara" });
            sehirler.Add(new Sehir() { sehirID = 34, sehirAdi = "İstanbul" });
            sehirler.Add(new Sehir() { sehirID = 35, sehirAdi = "İzmir" });
            int sehirID = int.Parse(ddlSehirler);
            ViewBag.Sehir = sehirler.Where(x=>x.sehirID==sehirID).FirstOrDefault().sehirAdi;
            return View();
        }

Sonuç: Yöntem2:

    <script type="text/javascript">

        $(document).ready(function () {

            $("#ddlSehirler").change(function () {
                var donen = $("#ddlSehirler").val();

                window.location.href = "/City/"+ donen;

            });

        });

    </script>
global.asax'ta yeni Route tanımlama:

            routes.MapRoute(
    "cityRoute",
    "city/{id}",
    new { controller = "Home", action = "City", id = 0 }
    );

Burada dikkat etmemiz gereken, eğer onchange anında yazarsak, controller içerisine parametre olarak göndermemiz için actionresult içerisinde de dropdownlist’in adında bir parametre almalıdır. Eğer jQuery ile yaparsak route tanımlayıp istediğimiz parametre yollayabiliriz.

Umarım faydalı bir yazı olmuştur.

Sonraki yazılarımda görüşmek üzere, MVC ile kalın.

, , ,

  1. #1 by Ali on Şubat 22, 2012 - 5:44 pm

    MVC 3 le ilgili bir sorum olacak; forumlarda da oldukca yaygın bir problem olmasına rağmen hiçbir çözüm işe yaramadı. DropdownlistFor yada Dropdownlist elementini selectlist üzerinden populate ederken selectedvalue hiçbir şekilde set edilmiyor.

    //Model class
    [Display(Name = "Ülke")]
    public string SelectedCountryId { get; set; }
    public Dictionary Countries
    {
    get
    {
    Dictionary clist = new Dictionary();
    clist.Add(“33″, “Fransa”);
    clist.Add(“90″, “Türkiye”);

    return clist;
    //return Parameters.Current.Countries;
    }
    }

    //View

    @Html.LabelFor(model => model.SelectedCountryId)

    @Html.DropDownListFor(model=>model.SelectedCountryId,
    new SelectList(Model.Countries, “Key”, “Value”, Model.SelectedCountryId),
    “seçiniz”)

    @Html.ValidationMessageFor(m => m.SelectedCountryId, “*”)

    • #2 by Mahmut Can Sözeri on Şubat 23, 2012 - 12:26 am

      Merhaba,

      Key ve Value verdiğiniz yerlere bu değerlere karşılık gelecek öğeleri yazmalısınız. Örnek kullanım:

      Controller İçerisi:
      var kategoriler = db.Categories.OrderBy(x => x.name).AsEnumerable().Select(x => new SelectListItem
      {
      Text = x.name,
      Value = x.ID.ToString(),

      });
      ViewBag.Deneme = kategoriler;

      cshtml İçeriği:
      @Html.DropDownList("deneme")

      Bu kod işinizi görecektir.

      İyi günler

      • #3 by Ali on Şubat 23, 2012 - 2:51 am

        Göndermiş olduğunuz kod dropdownlist’in populate edilmesini sağlıyor. Problem, dropdownlist populate olduktan sonra modeldeki property’nin selected value olarak set edilmesinde.

        //Controller
        var clist = db.Parameters
        .Where(p => p.type == “CNTRY”)
        .OrderBy(x => x.ptext)
        .AsEnumerable()
        .Select(x => new SelectListItem
        {
        Value = x.pvalue,
        Text = x.ptext
        });
        ViewBag.CountryId = clist;
        //cshtml
        @Html.DropDownList(“CountryId”,”please select..”)

        //oluşan html
        please select..
        Fransa
        Türkiye

  1. ASP.NET MVC Archived Buzz, Page 1

Yorum yapın

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Değiştir )

Twitter picture

You are commenting using your Twitter account. Log Out / Değiştir )

Facebook photo

You are commenting using your Facebook account. Log Out / Değiştir )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 114 other followers