ASP.Net Html.DropDownList Выбранный элемент не выбран - PullRequest
13 голосов
/ 30 июля 2009

У меня есть сайт, который использовал ASP.Net MVC Beta 5, и я только что обновил его до ASP.Net MVC 1.0. У меня проблемы с выбранным элементом в раскрывающемся списке.

У следующего человека есть похожий вопрос ( Html.DropDownList в ASP.NET MVC RC (обновление) без предварительного выбора элемента ), но ответа пока нет (за исключением того, что это может быть ошибка)

Метод My Controller выглядит следующим образом:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(Guid id)
{
    IntegrationLogic logic = new IntegrationLogic(new IntegrationLinq());
    CompanyLogic companyLogic = new CompanyLogic(new CompanyLinq());
    IntegrationContainer container = new IntegrationContainer();

    container.Sources = logic.GetImportSource(id);
    container.Companies = companyLogic.GetCompanies(); // Returns a IList<company>
    container.SourceActions = logic.GetAllSourceActions(); // Returns an IList<SourceAction>
    container.SinkActions = logic.GetAllSinkActions();
    container.SuccessActions = logic.GetAllSuccessActions();
    container.FailureActions = logic.GetAllFailureActions();
    container.Actions = logic.GetAllActions();
    container.Watchers = logic.GetAllWatcherActions();
    container.ChainActions = logic.GetAllChainActions();

    return View("View", container);
 }

Вид строго соответствует типу модели следующим образом

public partial class View : ViewPage<IntegrationContainer> {}

Проблемная область в шаблоне представления:

  <label for="Companies">Company: </label><%=Html.DropDownList("Companies",
                                                new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%>

Я создаю выпадающий список, выбранный элемент фактически никогда не выбирается - и в этом проблема. "item.CompanyID" - это Guid, "id" - это Guid, а "name" - это строка в объекте компании, предоставленном в IList, который содержится в экземпляре ViewData.Model.Companies.

Это действительно ошибка? - Мне трудно понять, почему это все еще присутствует в ASP.Net MVC ... Я был бы полностью счастлив, если бы это было чем-то, что я сделал.

Независимо от того, что было бы предложено обойти?

Спасибо

1 Ответ

21 голосов
/ 31 июля 2009

Оказывается, что если имя вашего элемента управления через Html.DropDownList совпадает с именем объекта коллекции, это вызывает проблему с ASP.Net MVC.

Так что, если я изменю следующий код:

<label for="Companies">Company: </label><%=Html.DropDownList("Companies",
                                                new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%>

до:

<label for="Companies">Company: </label><%=Html.DropDownList("company",
                                                new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%>

все теперь работает. Это связано с тем, что название коллекции на модели было Model.Companies .... bonkers ... также обратите внимание, что изменение регистра имени элемента управления с «Компании» на «компании» также не работает (что делает смысл я полагаю).

Я мог бы изменить модель, но, поскольку большая ее часть построена с использованием Linq-to-SQL, я думаю, что проще изменить имена элементов Html.

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