MVC SelectList не работает - PullRequest
       38

MVC SelectList не работает

6 голосов
/ 28 июня 2009
List<SelectListItem> items = new List<SelectListItem>();
if (a)
{
    SelectListItem deliveryItem = new SelectListItem()
    {
        Selected = a.selected,
        Text = "Delivery",
        Value = "1"
    };

    items.Add(deliveryItem);
}

if (b)
{
    SelectListItem pickupItem = new SelectListItem()
    {
        Selected = b.selected,
        Text = "Pickup",
        Value = "2"
    };

    items.Add(pickupItem);
}

SelectList selectList = new SelectList(items);

ViewData["OrderTypeList"] = selectList;

Затем используйте его с

Html.DropDownList("OrderTypeList") 

Визуализирует

<select id="OrderTypeList" name="OrderTypeList"><option>System.Web.Mvc.SelectListItem</option>
<option>System.Web.Mvc.SelectListItem</option>
</select>

Почему параметры рендеринга некорректны?

Ответы [ 5 ]

7 голосов
/ 05 апреля 2011

Вы могли бы также просто изменить одну строку из:

SelectList selectList = new SelectList(items);

до

SelectList selectList = new SelectList(items, "Text", "Value");

Это будет указывать MVC, какие свойства следует использовать в качестве Text и Value в тегах параметров.

7 голосов
/ 28 июня 2009

Метод конструктора, который вы вызываете, когда делаете:

SelectList selectList = new SelectList(items);

Создает набор SelectListItems, которые сами указывают на SelectListItems (отсюда и странная опция, поскольку она просто вызывает ToString для объекта). Вместо этого установите в своем списке ключ ViewData напрямую

ViewData["OrderTypeList"] = items;
1 голос
/ 08 июля 2011

Если вы посмотрите на Intellisense для перегрузок конструктора SelectList, код SelectList (items) должен работать, но не работает. То, что он просто выполняет ToString () для элементов, насколько я могу судить, является ошибкой, которую Microsoft должна исправить. Ответы - все хорошие обходные пути. Кстати, если вы используете метод, предоставляющий «Текст» и «Значение», правильный ответ должен быть

 SelectList selectList = new SelectList(items, "Value", "Text")

не

SelectList selectList = new SelectList(items, "Text", "Value")

По крайней мере, это согласуется с моими экспериментами в MVC 3.

1 голос
/ 29 июня 2009

Или вы можете создать класс, который будет содержать список выбора, а затем вернуть класс в качестве модели представлений. Я думаю, что это гораздо более элегантный способ сделать это, чем ViewData.

public class MyFormViewModel
{
    public SelectList Friends { get; set; }
}

Тогда в вашем ActionResult

MyFormViewModel fvm = new MyFormViewModel();
fvm.Friends = new SelectList(myList, "UserName", "NickName");

Тогда по вашему мнению

<%= Html.DropDownList("ToUserName", Model.Friends, new { @class = "field" })%>
0 голосов
/ 28 июня 2009

Я думаю, что вы должны попробовать рендеринг с

Html.DropDownList("OrderTypeList", ViewData["OrderTypeList"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...