Как выбрать значение для раскрывающегося списка из базы данных в ASP.NET MVC и C #? - PullRequest
2 голосов
/ 26 января 2011

У меня есть dropdownlist, который хранится в TitleEditorTemplate:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%=Html.DropDownList("", 
                      new SelectList(
                          new[] { "MR", "MRS", "MISS", "MS", "SIR", "REV", "DR"}
                      )
)%>

View

<%=Html.EditorFor(x => x.Title, "TitleEditorTemplate")%>

ViewModel

[UIHint("TitleEditorTemplate")]
[Required(ErrorMessage = "Please select a title")]
public string Title { get; set; }

Контроллер

//Results of a query of textboxes
Title = data.Title,

Проблема

Моя проблема возникает, когда я пытаюсь отредактировать (извлекать данные из базы данных) информацию, а затем записать UPDATE в базу данных, все остальное корректно возвращается назад ивставлены в правильные текстовые поля.

Однако dropdownlist автоматически выбирает первый вариант «MR», а не «MRS».

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

Код DropDownList

<select id="Title_TitleDropDown" name="Title.TitleDropDown"><option>MR</option>
<option>MRS</option>
<option>MISS</option>
<option>MS</option>
<option>SIR</option>
<option>REV</option>
<option>DR</option>
</select>

Что мне не хватает?Как заставить его выбрать опцию, выбранную из базы данных в качестве выбора по умолчанию?

Например:

Столбцы базы данных

  • Заголовок: DR
  • Имя: Джон
  • Фамилия: Смит

Когда пользователь хочет обновить эту информацию, он может это сделать.На моей странице aspx он будет заполнять оба текстовых поля имени / фамилии, но не выпадающий список, вместо этого он становится значением по умолчанию «MR», поэтому имя становится мистером Джоном Смитом, а не доктором Джоном Смитом.

Ответы [ 2 ]

3 голосов
/ 26 января 2011

SelectList принимает выбранное значение, а также доступные опции.

Так что в этом примере следует выбрать MRS.

new SelectList(new[] { "MR", "MRS", "MISS", "MS", "SIR", "REV", "DR"}, "MRS")

ОБНОВЛЕНИЕ

Здесьпример использования RenderPartial ...

<% Html.RenderPartial("ViewUserControl1", new DropDownModel {Name = "Title", SelectedValue = "MISS"});%>

Вы можете использовать Model.Title вместо "MISS" ...

Вот DropDownModel

public class DropDownModel
{
    public string Name { get; set; }

    public object SelectedValue { get; set; }
}

Вот частичное представление:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.DropDownModel>" %>
<%= Html.DropDownList("test", new SelectList(new[] { "MR", "MRS", "MISS", "MS", "SIR", "REV", "DR"}, Model.SelectedValue)) %>

Это всего лишь быстрый макет, который показывает, как вы могли бы это сделать - возможно, вы захотите улучшить концепцию!

2 голосов
/ 26 января 2011

Я считаю, что проблема в том, что имя свойства и имя элемента управления не совпадают.Я подозреваю, хотя я не проверял, что элемент управления select в конечном итоге называется Title.TitleDropDown.Это препятствует назначению значения картографом по умолчанию.

Изменение выпадающего управления на:

<%=Html.DropDownList("",new SelectList(new[] { "MR", "MRS", "MISS", "MS", "SIR", "REV", "DR"}))%>

должно решить проблему.

...