Html.ListBox () и MultiselectList - PullRequest
       25

Html.ListBox () и MultiselectList

3 голосов
/ 15 мая 2010

У меня небольшая проблема с Html.ListBox.

Я занимаюсь разработкой личного блога в ASP.NET MVC 1.0 и создал adminpanel, где я могу добавлять и редактировать сообщения! Во время этих двух операций я также могу добавить теги.

Я думаю об использовании Html.ListBox() помощника для вывода списка всех тегов, и поэтому я могу выбрать несколько тегов для добавления в сообщение! Проблема не в режиме добавления, а в режиме редактирования, где я должен предварительно выбрать теги записи.

Я прочитал, что должен использовать MultiSelectList и так в его проходе конструктора, списке тегов и списке тегов (предварительно выбранное значение).

Но я не знаю, как использовать этот класс.

Выкладываю, какой-то код:

Это метод моей модели, который получает все теги списка в списке выбора

public IEnumerable<SelectListItem> GetTagsListBox()
    {
            return   from t in db.Tags
                     orderby t.IDTag descending
                     select new SelectListItem {
                         Text = t.TagName,
                         Value = t.IDTag.ToString(),
                     };
    }

Таким образом, в Edit (Get and Post), Add (Get and Post) я использую ViewData для передачи этого списка в Html.ListBox().

ViewData["Tags"] = tagdb.GetTagsListBox();

А на мой взгляд

<%=Html.ListBox("Tags",ViewData["Tags"] as SelectList) %>

Так что с этим кодом все нормально в режиме добавления.

Но в режиме редактирования мне нужно предварительно выбрать эти значения.

Так что теперь, конечно, мне нужно создать метод, который получает все теги bypostid.

а затем в ViewData что я должен передать?

Любое предложение?

Ответы [ 3 ]

2 голосов
/ 15 мая 2010

Я думаю, вы могли бы сделать следующее:

public IEnumerable<SelectListItem> GetTagsListBoxWithPostTagsSelected(int postID)
{
    // Assuming you need to create this function and that Tag.IDTag is an int
    var postTags = GetAllTagsByPostID(postID);

    return from t in db.Tags           
           orderby t.IDTag descending           
           select new SelectListItem {           
               Text = t.TagName,           
               Value = t.IDTag.ToString(),
               Selected = postTags.Exists(pt => pt.IDTag == t.IDTag)
           };           
}           

Это должно вернуть вам правильный список со значениями из выбранного сообщения.

Вам нужно будет сделать GetAllTagsByPostID(postID) и использовать новый метод, который принимает PostID, чтобы убедиться, что теги выбраны правильно.

Никаких изменений не потребуется:

<%=Html.ListBox("Tags", ViewData["Tags"] as SelectList) %>

ViewData["Tags"] теперь должен содержать необходимую информацию для выбора ListBox предметов.

0 голосов
/ 30 июля 2010

Решение, которое я нашел для получения выбора в множественном списке выбора с помощью ListBoxFor, было опубликовано другим пользователем в этой теме; Проблемы с выбором значений в ListBoxFor

Надеюсь, это поможет.

0 голосов
/ 15 мая 2010

Установите Selected свойство SelectListItem s для выбранных тегов на true.

...