Проблемы с выбором значений в ListBoxFor

Работая над моим первым веб-приложением ASP.Net MVC2 недавно, я столкнулся с некоторыми проблемами, когда я должен был выбрать несколько значений в поле списка. Я работал вокруг этого с некоторым jQuery, но шел вперед и соединял некоторый очень простой код для демонстрации. Я использую EF для модели с двумя объектами - Клиенты и HelpDeskCalls:

Контроллер:

 public ActionResult Edit(int id)
    {
        Customer currCustomer = ctx.Customers.Include("HelpDeskCalls").Where(c => c.ID == id).FirstOrDefault();
        List currCustCalls = (ctx.HelpDeskCalls.Where(h => h.CustomerID == id)).ToList();
        List currSelectItems = new List();
        List selectedValues = new List();
        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) currSelectItems;
        ViewData["currSelected"] = (IEnumerable) selectedValues;
        return View("Edit", currCustomer);
    }

Посмотреть:

<%: 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, new { size = "12"}) %> <%: Html.ListBox("Model.HelpDeskCalls", new MultiSelectList(Model.HelpDeskCalls, "ID", "CallTitle", (IEnumerable)ViewData["currSelected"]), new { size = "12"}) %> <%: Html.ValidationMessageFor(model => model.HelpDeskCalls) %>

Для этого образца я просто выбираю HelpDeskCall. Идентификаторы, которые ровны. Я пробую два различных синтаксиса за ListBoxFor: Каждый использует IEnumerable значений для выборов, одного использования IEnumerable SelectListItems. По умолчанию, когда я выполняю этот код, никакие выборы не сделаны ни к одному ListBoxFor, но ListBox несо строгим контролем типов выбирает правильно.

Я читал это сообщение на ASP.NET и этот поток на Так, но никакая радость. На самом деле, если я добавляю переопределение ToString () к моему классу HelpDeskCall (как предложено в потоке ASP.net), все значения выбраны, который не является правильным также.

Если кто-то мог бы пролить некоторый свет на то, как это должно работать (и что я пропускаю или делаю неправильно), это затем, новичок был бы очень благодарен.

45
задан ROMANIA_engineer 22 January 2018 в 17:32
поделиться

1 ответ

Вот пример, иллюстрирующий сильно типизированную версию:

Model:

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

Controller:

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);
    }
}

View:

<%: Html.ListBoxFor(x => x.SelectedItemIds, Model.Items) %>
91
ответ дан 26 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: