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

  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • max2sims2

    max2sims2

    19 Kasım 2008
  • metallmanutza13

    metallmanutz

    13 NİSAN 2007