Проблема рендеринга с использованием SelectList из определенных вручную SelectListItems в MVC 2 - PullRequest
4 голосов
/ 17 сентября 2010

Я использую ASP.NET MVC 2 (.NET 3.5), и мне нужно вручную определить, что должно быть списком опций.Когда я это делаю, я получаю раскрывающееся меню, где каждая из записей в ручном режиме читается как «System.Web.Mvc.SelectListItem».

Моя модель представления определяет список следующим образом:

    public SelectList YesNoList
    {
      get
      {
        List<SelectListItem> tmpList = new List<SelectListItem>();
        tmpList.Add(new SelectListItem {Text = "", Value = ""});
        tmpList.Add(new SelectListItem {Text = "Yes", Value = "1"});
        tmpList.Add(new SelectListItem {Text = "No", Value = "0"});
        YesNoList = new SelectList(tmpList,"");
      }
      private set{}
     }

В представлении, на которое я ссылаюсь, используя Html.DropDownList:

Html.DropDownList("FieldName", viewmodel.YesNoList);

То, что я ожидаю отрисовать на конечной веб-странице, должно выглядеть следующим образом:

<select id="FieldName" name="FieldName">
  <option value=""/>
  <option value="1">Yes</option>
  <option value="0">No</option>
</select>

ВместоЯ получаю:

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

Я в растерянности, так как не могу понять, почему возвращается тип, поэтому буду признателен, если кто-нибудь укажет мне, что не так с определением модели представления или точкойлучший способ.Я не решался извлекать SelectList из коллекций классов C #, поскольку SelectList обеспечивал бы последовательный способ перебора значений и отображения текста.

Заранее спасибо, надеюсь, кто-нибудь может помочь.

Приветствия,

J

Ответы [ 3 ]

7 голосов
/ 17 сентября 2010

Выпадающий список также может обработать List<SelectListItem>, просто отправьте его вместо.

Html.DropDownList("FieldName", viewmodel.YesNoList);

и

public List<SelectListItem> YesNoList
{
  get
  {
    List<SelectListItem> YesNoList = new List<SelectListItem>();
    YesNoList.Add(new SelectListItem {Text = "", Value = ""});
    YesNoList.Add(new SelectListItem {Text = "Yes", Value = "1"});
    YesNoList.Add(new SelectListItem {Text = "No", Value = "0"});
    return YesNoList;
  }
  private set{}
 }

вы действительно делаете неправильно при создании списка выбора.

должно быть:

new SelectList(tmpList, "Value", "Text"); 

а затем забудьте мой код выше. Вы можете сделать это с любым списком, если вы дадите ему список и значение и текст «ключ»

0 голосов
/ 01 июня 2013

Попробуйте этот код:

OdbcDataReader iLRt1 = databaseFunctions.databaseConnection.getFromDatabaseReader("select * from groups order by head");

List<SelectListItem> Hello1 = new List<SelectListItem>();
Hello1.Add(new SelectListItem { Text = "Select All", Value = "Select All" });

while (iLRt1.Read())
{
    Hello1.Add(new SelectListItem { Text = iLRt1["head"].ToString(), Value = iLRt1["code"].ToString() });}

ViewData["myList2"] = Hello1;
0 голосов
/ 21 июня 2012

Вы можете сделать это с помощью шаблона редактора. Назовите его «Да Нет» и включите следующий код ...

@Modeltype Boolean

@Code
  Dim YesNoList = New List(Of SelectListItem)()
  YesNoList.Add(New SelectListItem() With {.Text = "Yes", .Value = True})
  YesNoList.Add(New SelectListItem() With {.Text = "No", .Value = False})

  Dim list = New SelectList(YesNoList, "Value", "Text", Model)
End Code

@Html.DropDownList("", list)

Затем в вашей модели присвойте UIHint значение «YesNo» для вашей собственности. Это означает, что теперь EditorFor для этого свойства даст вам хороший список Да / Нет, который будет привязан как логическое значение.

...