Раскрывающийся список ASP.NET MVC - PullRequest
7 голосов
/ 25 апреля 2009

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

Спасибо Дэнни

Ответы [ 4 ]

9 голосов
/ 25 апреля 2009

Теперь, когда расширение HtmlHelper принимает IEnumerable<SelectListItem>, я не создаю SelectList's, а обычно просто создаю SelectListItems с LINQ.

Контроллер

ViewData["CategoryID"] = categories.Select( c => new SelectListItem
                                                 {
                                                     Text = c.CategoryName,
                                                     Value = c.CategoryID
                                                 }
                                          );

View

<%= Html.DropDownList("CategoryID") %>

или если я хочу выбор по умолчанию

<%= Html.DropDownList("CategoryID",
                      (IEnumerable<SelectListItem>)ViewData["CategoryID"],
                      "Select a Category" ) %>

РЕДАКТИРОВАТЬ :

Интересным моментом в раскрывающемся списке является то, что вам нужно указать диапазон значений, из которых можно выбрать одно значение, которое соответствует вашей фактической модели данных. Я обычно предоставляю диапазон (пункты меню) через просмотр данных и ожидаю возврата значений модели при публикации страницы. Если вам нужны также строго типизированные меню, вам необходимо предоставить модель только для просмотра, которая инкапсулирует вашу реальную модель и любые меню. Это будет включать в себя при публикации использование префиксов для идентификации элементов модели. На мой взгляд, компромисс - более простая привязка модели к посту, чем использование строго типизированных меню в представлении. Я не зациклен на последнем, поэтому я предпочитаю не помещать свои меню в модель. Если вы хотите сделать это, это может выглядеть следующим образом.

Модель

public class CategoryViewModel
{
    public Category Category { get; set; }
    public IEnumerable<SelectListItem> CategoryMenu { get; set; }
    ...
}

Контроллер

Действие дисплея

var model = new CategoryViewModel();
model.CategoryMenu = categories.Select( c => new SelectListItem
                                                 {
                                                     Text = c.CategoryName,
                                                     Value = c.CategoryID
                                                 }
                                      );

...
return View(model);

Создать действие

[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Create( [Bind(Prefix="Category")]Category category )
{
   ...
}

View

<%= Html.TextBox("Category.Name") %>

<%= Html.DropDownList("Category.CategoryID",
                      Model.CategoryMenu,
                      "Select a Category" ) %>
5 голосов
/ 25 апреля 2009

Вот одна отличная статья Роб Коннери

Код контроллера

NorthwindDataContext db = new NorthwindDataContext();
var categories = from c in db.Categories select c;
ViewData["CategoryID"] = new SelectList(categories, "CategoryID", "CategoryName");

Просмотр разметки

<%=Html.DropDownList("CategoryID")%>
0 голосов
/ 18 декабря 2016

Написать в виде:

@{
TaskManagerContext context = new TaskManagerContext();

IEnumerable<TestTask1.Models.User> CDrop = context.Users.ToList();
List<SelectListItem> selectList = new List<SelectListItem>();
foreach (var c in CDrop)
{
    SelectListItem i = new SelectListItem();
    i.Text = c.Username.ToString();
    i.Value = c.ID.ToString();
    selectList.Add(i);
}

}

Вы можете сослаться на это так:

@Html.DropDownListFor(m => m.UserID,
                          new SelectList(selectList, "Value", "Text"));

Вы также можете выбрать конкретную строку:

TaskManagerContext context = new TaskManagerContext();
UsersRepository repo = new UsersRepository();
User user = repo.GetAll().FirstOrDefault(u => u.ID == ViewBag.UserId);
ViewBag.User = user;

<div><h3><label>@ViewBag.Title1</label>@ViewBag.User.Username</h3></div>
0 голосов
/ 23 октября 2009

Если вам нужно добавить атрибуты html в ваши теги, это будет способ сделать это. Передайте модель для просмотра e.i. «Возвращаемое представление (someModel)», затем в представлении:

        <select id="Groups" name="Groups">
            <% foreach (SelectListItem item in Model.GroupsDropDown)
               {
                   if (item.Selected)
                   {%>
                        <option selected="selected" title="<%= item.Text %>">
                            <%= item.Text%></option>
                    <%}
                     else
                    {%>
                        <option title="<%= item.Text %>">
                            <%= item.Text%></option>
                    <%} %>
            <% } %>
        </select>

GroupsDropDown - это свойство вашей модели, например:

public IEnumerable GroupsDropDown {get; задавать; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...