На selectedValue DropdownList не влияет значение из БД - PullRequest
0 голосов
/ 01 августа 2011

Эта проблема сводила меня с ума, и утренние понедельники не очень помогают.

Я загружаю 2 выпадающих списка примерно так:

  • Этот получает значение, на которое влияет значение db

    <dd><%= Html.DropDownList("type", New SelectList(ViewData("typeList"), 
        "value", "text", Model.type), New With {.class = ""})%></dd>
    
  • Этот параметр игнорирует значение, загруженное в модель, и всегда отображает первое значение в раскрывающемся списке

    <dd><%= Html.DropDownList("action", New SelectList(ViewData("actionList"), 
        "value", "text", Model.action), New With {.class = ""})%></dd>    
    

Я уже отлаживал эту страницу, и Model.Action загружается с правильными значениями, но они никогда не присваиваются выбранному значению.

EDIT:

Это ActionResult, который отображает страницу:

<Authorize()> _
        Public Function Edit(ByVal id As Guid) As ActionResult
            Dim article As Article_Ad = articleAdRepository.GetById(id)

            ViewData("actionList") = GetActionValues()
            ViewData("typeList") = GetTypeValues()

            Return View(article)
        End Function

А вот функции, которые заполняют выпадающие списки:

Private Function GetTypeValues() As IEnumerable(Of SelectListItem)
            Dim list As New List(Of SelectListItem)
            Dim sel As SelectListItem

            'Imagem
            sel = New SelectListItem
            sel.Text = "Imagem"
            sel.Value = "image"
            list.Add(sel)

            'Video
            sel = New SelectListItem
            sel.Text = "Video"
            sel.Value = "video"
            list.Add(sel)

            Return list
        End Function

        Private Function GetActionValues() As IEnumerable(Of SelectListItem)
            Dim list As New List(Of SelectListItem)
            Dim sel As SelectListItem

            ' Call browser window
            sel = New SelectListItem
            sel.Text = "Mostrar Janela"
            sel.Value = 1
            list.Add(sel)

            ' Play fullscreen video
            sel = New SelectListItem
            sel.Text = "Mostrar Video em FullScreen"
            sel.Value = 2
            list.Add(sel)

            ' Show fullscreen picture
            sel = New SelectListItem
            sel.Text = "Mostrar Imagem em FullScreen"
            sel.Value = 3
            list.Add(sel)

            Return list
        End Function

Ответы [ 3 ]

1 голос
/ 01 августа 2011

Я применил аналогичный подход к вам, когда я строю SelectList в моей модели представления и ссылаюсь на него из своих представлений с помощью Html.DropDownList.

Одно большое отличие состоит в том, что я всегда устанавливаю свои значения / текстовые параметры в строковые значения, даже если соответствующие данные имеют тип int.

Пример (C # - извините):

private List<SelectListItem> widgets;

public List<SelectListItem> Widgets
{
  get
  {
    if (widgets == null)
    {
      widgets = new List<SelectListItem>();
      widgets.Add(new SelectListItem { Value = "10", Text = "10" });
      widgets.Add(new SelectListItem { Value = "25", Text = "25" });
      widgets.Add(new SelectListItem { Value = "50", Text = "50" });
      widgets.Add(new SelectListItem { Value = "100", Text = "100" });
      widgets.Add(new SelectListItem { Value = "500", Text = "500" });
    }
    return widgets;
  }
  private set { }
}

Еще одно отличие, хотя я сомневаюсь, что оно является причиной этой проблемы, заключается в том, что я строго ввожу свои представления в модель представления, а затем получаю доступ к свойству SelectList модели представления непосредственно из представления вместо назначения его для viewdata в контроллере. Похоже, что вы привязали свой взгляд непосредственно к сущности (то есть к модели домена).

1 голос
/ 01 августа 2011

Я узнал ответ на этот вопрос и мне немного стыдно за конечный результат, если честно. Кажется, что я использовал имя «действие» в переменной ViewData, что привело к конфликту с именем выпадающего списка «действие». После изменения ViewData на «actions» (добавили «s») он прекратил конфликтовать и правильно присвоил выбранное значение.

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

Спасибо всем за указатели здесь.

1 голос
/ 01 августа 2011

Не могли бы вы попытаться установить правильное значение SelectListItem.Selected?Я предполагаю, что элемент Imagem должен быть выбран ниже.

Private Function GetTypeValues() As IEnumerable(Of SelectListItem)
    Dim list As New List(Of SelectListItem)
    Dim sel As SelectListItem

    'Imagem
    sel = New SelectListItem
    sel.Text = "Imagem"
    sel.Value = "image"
    sel.Selected = True ' This line has been added
    list.Add(sel)
    '...

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