Как я могу заставить этот ASP.NET MVC SelectList работать? - PullRequest
124 голосов
/ 23 апреля 2009

Я создаю список выбора в моем контроллере для отображения в представлении.

Я пытаюсь создать его на лету, что-то вроде того ... вот так ...

myViewData.PageOptionsDropDown = 
   new SelectList(new [] {"10", "15", "25", "50", "100", "1000"}, "15");

Компилируется, но вывод плохой ...

<select id="PageOptionsDropDown" name="PageOptionsDropDown">
    <option>10</option>
    <option>15</option>
    <option>25</option>
    <option>50</option>
    <option>100</option>
    <option>1000</option>
</select>

Обратите внимание, как не выбран ни один элемент?

Как я могу это исправить ??

Ответы [ 23 ]

3 голосов
/ 18 августа 2011

Simple:

string[] someName = new string[] {"10", "15", "25", "50", "100", "1000"};
myViewData.PageOptionsDropDown = new SelectList(someName, "15");
3 голосов
/ 26 января 2011

Все эти ответы выглядят великолепно, но, похоже, контроллер готовит данные для представления в хорошо известном структурированном формате, а не просто позволяет представлению просто повторять IEnumerable <>, предоставляемый через модель, и создавать стандартный список выбора. затем позвольте DefaultModelBinder доставить выбранный элемент обратно вам через параметр действия. Да нет, почему нет? Разделение проблем, да? Кажется странным иметь контроллер для создания чего-либо, поэтому пользовательский интерфейс и View специфичны.

2 голосов
/ 21 июля 2009

Я просто так запустил и у меня не было проблем,

public class myViewDataObj
    {
        public SelectList PageOptionsDropDown { get; set; }
    }

public ActionResult About()
        {
            myViewDataObj myViewData = new myViewDataObj();
            myViewData.PageOptionsDropDown =
                  new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }, "15");

            ViewData["myList"] = myViewData.PageOptionsDropDown;
            return View();
        }

и

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

это также сработало, если вы это сделаете,

public ActionResult About()
        {
            myViewDataObj myViewData = new myViewDataObj();
            myViewData.PageOptionsDropDown =
                  new SelectList(new[] { "10", "15", "25", "50", "100", "1000" });

            ViewData["myListValues"] = myViewData.PageOptionsDropDown;
            ViewData["myList"] = "15";
            return View();
        }

и

<%=Html.DropDownList("myList",(IEnumerable<SelectListItem>)ViewData["myListValues"]) %>
1 голос
/ 30 сентября 2010

Я делаю это так:

List<SelectListItem> list = new List<SelectListItem>{
new SelectListItem {Selected = true, Text = "Select", Value = "0"},
new SelectListItem {Selected = true, Text = "1", Value = "1"},
new SelectListItem {Selected = true, Text = "2", Value = "2"}
};
return list.ToArray();

ToArray () решает проблемы.

1 голос
/ 16 марта 2010
MonthRepository monthRepository = new MonthRepository();
IQueryable<MonthEntity> entities = monthRepository.GetAllMonth();
List<MonthEntity> monthEntities = new List<MonthEntity>();

foreach(var r in entities)
{
    monthEntities.Add(r);
}

ViewData["Month"] = new SelectList(monthEntities, "MonthID", "Month", "Mars");
1 голос
/ 26 июня 2009

Используя ваш пример, это сработало для меня:

контроллер:

ViewData["PageOptionsDropDown"] = new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }, "15");

вид:

<%= Html.DropDownList("PageOptionsDropDown")%>
1 голос
/ 04 января 2016

Если вы хотите передать случайный текст в свой DropDownList, например, - Выбрать - , вы можете легко сделать это, используя этот код:

@Html.DropDownListFor(x => x.CategoryId, new SelectList(Model.Categories, "Id", "Name"), "--Select--", new { @class = "form-control" })
0 голосов
/ 14 апреля 2010

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

Как я уже сказал выше, я обнаружил, что мои списки выбора не работали в mvc2, когда ViewData, которому они были отправлены, назывался так же, как поле.

Например:

<%= Html.DropDownListFor((model => model.ForID), (SelectList)ViewData["ForName"]) %>

работает, когда

<%= Html.DropDownListFor((model => model.ForID), (SelectList)ViewData["ForID"]) %>

не работает, так как имя ViewData «ForID» имеет то же имя, что и поле, для которого оно работает

0 голосов
/ 23 апреля 2009

Возможно, в ваших ViewData есть некоторая неопределенность:

Взгляните Здесь

0 голосов
/ 30 сентября 2011

Если у вас есть коллекция в вашей модели, и ваш View является строго типизированным, некоторые варианты этого будут работать:

@Html.DropDownListFor(x => x.RegionID, 
    new SelectList(Model.Regions,"RegionID", "RegionName", Model.RegionID))

-или-

@Html.DropDownList("RegionID", 
    new SelectList(Model.Regions, "RegionID", "RegionName", Model.RegionID))
...