SORU
7 Temmuz 2010, ÇARŞAMBA


ListBoxFor seçme değerleri ile zorluklar

Bu benim ilk soru, ve muhtemelen kötü biridir, bu yüzden lütfen nazik olun.

ASP.NET MVC2 ilk web uygulamam için son bir çalışma, birden çok değer seçmek için, bir liste kutusunda ihtiyacım olduğu zaman bazı sorunlarla karşılaştım. Bazı jQuery ile birlikte çalıştım, ama devam ettim ve çok basit bir kod göstermek için bir araya. İki taraftan Müşteriler ve HelpDeskCalls ile model EF kullanıyorum:

Denetleyici:

 public ActionResult Edit(int id)
    {
        Customer currCustomer = ctx.Customers.Include("HelpDeskCalls").Where(c => c.ID == id).FirstOrDefault();
        List<HelpDeskCall> currCustCalls = (ctx.HelpDeskCalls.Where(h => h.CustomerID == id)).ToList();
        List<SelectListItem> currSelectItems = new List<SelectListItem>();
        List<String> selectedValues = new List<string>();
        foreach (HelpDeskCall currCall in currCustCalls)
        {
            bool isSelected = (currCall.ID % 2 == 0) ? true : false;
            //Just select the IDs which are even numbers...
            currSelectItems.Add(new SelectListItem() { Selected = isSelected, Text = currCall.CallTitle, Value = currCall.ID.ToString() });
            //add the selected values into a separate list as well...
            if (isSelected)
            {
                selectedValues.Add(currCall.ID.ToString());
            }
        }
        ViewData["currCalls"] = (IEnumerable<SelectListItem>) currSelectItems;
        ViewData["currSelected"] = (IEnumerable<String>) selectedValues;
        return View("Edit", currCustomer);
    }

Görünüm:

<div class="editor-field">
            <%: Html.ListBoxFor(model => model.HelpDeskCalls, new MultiSelectList(Model.HelpDeskCalls, "ID", "CallTitle", (IEnumerable) ViewData["currSelected"]), new { size = "12" })%>       
            <%: Html.ListBoxFor(model => model.HelpDeskCalls, ViewData["currCalls"] as IEnumerable<SelectListItem>, new { size = "12"}) %>
            <%: Html.ListBox("Model.HelpDeskCalls", new MultiSelectList(Model.HelpDeskCalls, "ID", "CallTitle", (IEnumerable)ViewData["currSelected"]), new { size = "12"}) %>      
            <%: Html.ValidationMessageFor(model => model.HelpDeskCalls) %>
</div>

Bu örnek için, sadece HelpDeskCall seçme ediyorum.Hatta hangi kimlikleri. Seçimler için değerleri bir IEnumerable kullanır, bir SelectListİtems bir IEnumerable kullanarak. ListBoxFor için iki farklı sözdizimi çalışıyorum: Bu kodu çalıştırdığınızda, varsayılan olarak, hiçbir seçim ya ListBoxFor için yapılmış, ancak olmayan-kesinlikle yazılmış Liste doğru olarak seçer.

ASP.NET this thread this post ama hiçbir sevinç okudum. Eğer geçersiz kılma Sağlar eklersem aslında, () HelpDeskCall sınıfım ASP.NET iplik önerdiği gibi () tüm değerleri doğru ya da değil seçilir.

Eğer birisi bu işi nasıl biraz ışık ve ya yanlış yapıyor ne kaçırıyorum () tutacak olsaydım, o zaman bu acemi çok minnettar olacaktır.

John

CEVAP
7 Temmuz 2010, ÇARŞAMBA


İşte size bir örnek kesinlikle yazılmış sürümünü gösteren:

Model:

public class MyViewModel
{
    public int[] SelectedItemIds { get; set; }
    public MultiSelectList Items { get; set; }
}

Denetleyici:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Preselect items with id 1 and 3
        var selectedItemIds = new[] { 1, 3 };

        var model = new MyViewModel
        {
            Items = new MultiSelectList(
                new[] 
                {
                    // TODO: Fetch from your repository
                    new { Id = 1, Name = "item 1" },
                    new { Id = 2, Name = "item 2" },
                    new { Id = 3, Name = "item 3" },
                }, 
                "Id", 
                "Name", 
                selectedItemIds
            )
        };

        return View(model);
    }
}

Görünüm:

<%: Html.ListBoxFor(x => x.SelectedItemIds, Model.Items) %>

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • mliskIT

    mliskIT

    29 Mart 2012
  • Strata1000

    Strata1000

    28 EYLÜL 2009