SORU
31 Mart 2011, PERŞEMBE


En kolay C ile MVC 3 ASP.NET içinde Çağlayan bir açılan oluşturmak için *

DropDownList iki oluşturmak istiyorumcascadeC# MVC3 (tercihen Razor) kullanarak.

Yıl ve ay seçilen yıla göre özel olarak seçebileceğiniz bir tane seçebileceğiniz bir açılır istiyorum.

Basit bir şekilde anlatayım. Açılan listeden "açılan liste" ay "kalabalık olur, geçerli ay (yani Mart) kadar aylık bedeli" yıl, geçerli yıl (yani 2011) ı seçin Diğer durumlarda (yıl) için herhangi bir kısıtlama verilir. Ayrıca "" açılan listeden "" "yıl" seçilir. açılan listedeki herhangi bir öğe önce ay engellemek için iyi olurdu

Ben zaten bazı çözümler için internette, jQuery ya da ev yapımı yaklaşımlar bile kullanarak görünüyordu, ama onlar tüm MVC son sürümleri bakınız ve bazı komutlar MVC3 kaldırılmıştır.

Çok yardımcı olduğunuz için teşekkür ederim.

CEVAP
31 Mart 2011, PERŞEMBE


Her zaman olduğu gibi bir model ile başlayın:

public class MyViewModel
{
    public int? Year { get; set; }
    public int? Month { get; set; }

    public IEnumerable<SelectListItem> Years
    {
        get
        {
            return Enumerable.Range(2000, 12).Select(x => new SelectListItem
            {
                Value = x.ToString(),
                Text = x.ToString()
            });
        }
    }
}

denetleyici:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    public ActionResult Months(int year)
    {
        if (year == 2011)
        {
            return Json(
                Enumerable.Range(1, 3).Select(x => new { value = x, text = x }), 
                JsonRequestBehavior.AllowGet
            );
        }
        return Json(
            Enumerable.Range(1, 12).Select(x => new { value = x, text = x }),
            JsonRequestBehavior.AllowGet
        );
    }
}

ve son olarak bir görünüm:

@model AppName.Models.MyViewModel

@Html.DropDownListFor(
    x => x.Year, 
    new SelectList(Model.Years, "Value", "Text"),
    "-- select year --"
)

@Html.DropDownListFor(
    x => x.Month, 
    Enumerable.Empty<SelectListItem>(),
    "-- select month --"
)

<script type="text/javascript">
    $('#Year').change(function () {
        var selectedYear = $(this).val();
        if (selectedYear != null && selectedYear != '') {
            $.getJSON('@Url.Action("Months")', { year: selectedYear }, function (months) {
                var monthsSelect = $('#Month');
                monthsSelect.empty();
                $.each(months, function (index, month) {
                    monthsSelect.append($('<option/>', {
                        value: month.value,
                        text: month.text
                    }));
                });
            });
        }
    });
</script>

Açıkçası benim örnekte tüm değerleri kodlanmış olduğunu fark edeceksiniz. Sen geliştirmek gerekir, bu mantığı kullanarak kavramlar geçerli yıl, ay, geçerli, muhtemelen bile getirme, bu değerleri bir depo, vb... ama bilerek gösteri bu yeterli olmalı sizden doğru yolda.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011
  • midomansour

    midomansour

    19 EYLÜL 2009
  • Ryan Billy

    Ryan Billy

    30 EKİM 2006