MVC 3 - раскрывающийся список лесов - PullRequest
8 голосов
/ 17 апреля 2011

Я играю с Леса, которые находятся в Asp.net MVC

У меня есть свойство в моей модели просмотра для стран

public IEnumerable<SelectListItem> Countries { get; set; }

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

Я скомпилировал проект перед этим

Я также попытался добавить свойство, подобное этому

public int CountryId { get; set; }

Как и предполагалось в этой статье, действует соглашение

http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/

Я использую опцию Добавить представление , имеющуюся при щелчке правой кнопкой мыши в методе действия контроллера

Есть идеи, что не так?

Ответы [ 3 ]

5 голосов
/ 17 апреля 2011

В моем текущем проекте я столкнулся с этой проблемой и не смог найти быстрый способ создать раскрывающийся список отношений один-много внутри одной из моих сущностей.

То, что я закончил, было похоже на следующее:

1 - Создать обычный AddView => Создать путь.

2 - Если у меня было свойство ID в моем классе модели, шаблон defaul; t сгенерирует что-то вроде этого, чтобы представить это свойство на мой взгляд:

<div class="editor-label">
                @Html.LabelFor(model => model.CityID)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.CityID)
                @Html.ValidationMessageFor(model => model.CityID)
</div>

3 - Теперь мне нужно заменить этот шаблон по умолчанию на рабочий, поэтому я написал этот код в методе CREATE:

IEnumerable<SelectListItem> cityItems = dataContext.Cities.AsEnumerable().Select(c => new SelectListItem()
            {
                Text = c.Name,
                Value = c.ID.ToString(),
                Selected = false,
            });
            SelectList cityList = new SelectList(cityItems, "Value", "Text");
            ViewBag.CityList = cityList;

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

4 - заменить код по умолчанию в моем представлении следующим:

<div class="Post-label">
                        <div class="editor-label">
                            @Html.LabelFor(model => model.CityID)
                        </div>
                        <div class="editor-field">
                          @Html.DropDownListFor(m => m.CityID, ViewData["CityList"] as SelectList)
                            @Html.ValidationMessageFor(model => model.CityID)
                        </div>
</div>

Причина, по которой я использовал ViewData["CityList"] вместо ViewBag.CityList, заключается в том, что этот работает, а другой нет.

5 - теперь мой вид работает с поиском и получает данные City точно так же, как я ожидал, и использование той же модели в моем Edit виде привело к работе тоже.

Попробуйте и дайте мне знать, что произошло, спасибо.

4 голосов
/ 19 сентября 2012

Я заметил, что для данной модели сгенерированный скаффолдом код «Создать» при создании нового контроллера отличается от того, если щелкнуть правой кнопкой мыши существующий контроллер и сказать «Добавить представление» и выбрать «Создать» скаффолдингшаблон.В первом случае, если у вас есть правильные свойства в дочернем классе

public Country Country {get;set;}
public int CountryID {get;set;}

, то в этом случае (добавление контроллера с поддержкой чтения / записи леса MVC и соответствующего класса Model) сгенерирует @ Html.DropDownList дляродительское отношение, в то время как щелчок правой кнопкой мыши в методе Create контроллера не создаст раскрывающийся список, но вместо этого создаст @ Html.EditorFor для отношения.

Так что ответ, если вы хотите, чтобы код скаффолдинга генерировал отбрасывание-downdown может быть для удаления и повторного создания вашего контроллера, если это возможно, в противном случае вручную добавьте соответствующий код.

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

Чтобы иметь возможность выбрать страну с раскрывающимся списком, свойство в вашей модели должно быть:

public Country Country{ get; set; } Свойство навигации, используемое EF, не включает базу данных

с

public Country CountryId{ get; set; } Создание внешнего ключа в таблице Person

Каждый экземпляр / запись о человеке связан со страной: отношение определяется с помощью свойства навигации с помощью кода и CountryID для базы данных. Затем шаблон скаффолдинга сгенерирует методы и представления редактирования / создания, используя:

ViewBag.PossibleCountries

Вот похожий сценарий.

...