ASP.NET MVC: SelectList игнорирует параметр selectedValue в конструкторе - PullRequest
0 голосов
/ 10 февраля 2010

На мой взгляд, у меня есть следующее:

<%= Html.DropDownList("Schema.MetaData.SourceTableName", new SelectList(Model.Schema.MetaData.SourceTableNames, Model.Schema.MetaData.SourceTableName), Model.SourceTablesOptionLabel)%>

SourceTableNames имеет тип List<string>

Когда я заполняю модель, я присваиваю значение для SourceTableName, используя следующий метод для моей модели представления:

public void SetDefaultSourceTable(string mostLikelyCandidate)
{
    Debug.Assert(this.Schema.MetaData.SourceTableNames.Contains(mostLikelyCandidate));
    this.Schema.MetaData.SourceTableName = mostLikelyCandidate;
}

(Debug.Assert показывает, что все, что я передаю, является частью списка SourceTableNames)

К сожалению, что бы я ни передавал этому методу, и хотя все свойства верны, даже когда я ставлю точку останова в самом представлении, всегда выбираются первые параметры

<SELECT id=Schema_MetaData_SourceTableName name=Schema.MetaData.SourceTableName>
  <OPTION selected>Table A</OPTION> 
  <OPTION>Table B</OPTION> 
  <OPTION>Table C</OPTION>
</SELECT> 

Есть какие-нибудь подсказки относительно того, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2010

Привет, спасибо за комментарии и предложения, и извинения за задержку обратной связи.

Похоже, виновником является перегрузка метода расширения DropDownList, принимающая параметр optionLabel.

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

Мне, вероятно, стоит взглянуть на источник asp.net mvc, чтобы точно узнать, что происходит и почему это происходит, но сейчас я слишком сжат, чтобы тратить на это больше времени:)

0 голосов
/ 10 февраля 2010

Почему бы вам не создать список выбора в пользовательской модели представления и просто извлечь его из самого представления?

ака:

SelectList RolesList = new SelectList(roles, "RoleID", "RoleName", user.RoleID);

<%= Html.DropDownList("RoleID", Model.RolesList, "Select a Role...", new { @class = "required" }) %>

РЕДАКТИРОВАТЬ: role - это объект IQueryable, просто объект LINQ, для которого есть roleid, rolename column

, где roleID - это ключ для привязки выбранного значения, а user.roleid - это значение, которое нужно выбрать.

это работает в некоторых моих приложениях MVC

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