ASP.NET MVC2, сущности отношений LINQ-TO-SQL, список выбора, привязка модели - PullRequest
0 голосов
/ 25 ноября 2010

Допустим, у вас есть следующий сценарий:

  • Таблица: Страна;Столбцы: CountryID, CountryName
  • Таблица: Состояние;Столбцы: StateID, StateName, CountryID (внешний ключ)
  • Таблица: Населенный пункт;Столбцы: LocalityID, LocalityName, StateID (внешний ключ)

В MVC приятно, что автоматически сгенерированные классы LINQ-TO-SQL отображают отношения ассоциации в коде, чтобы вы могли вызывать связанные внешниеСущность, например, на мой взгляд, может иметь:

<% foreach (var locality in Model.Localities) { %>

    <tr>
        <td>
            <%: locality.LocalityName %>
        </td>
        <td>
            <%: locality.State.StateName %>
        </td>
        <td>
            <%: locality.State.Country.CountryName %>
        </td>
    </tr>

<% } %>

Это успешно отрисовывается, когда я просматриваю действие index.

Однако у меня возникли проблемы с действием "Изменить".Вот код:

        <strong>Locality Name</strong>
        <div class="editor-field">
            <%: Html.TextBox("LocalityName", Model.Locality.LocalityName) %>
            <%: Html.ValidationMessage("LocalityName")%>
        </div>

        <strong>Country</strong>
        <div class="editor-field">
            <%= Html.DropDownList("CountryID", Model.CountriesDDL, "-- select --") %>
        </div>

        <strong>State</strong>
        <div class="editor-field">
            <%= Html.DropDownList("StateID", Model.StatesDDL, "-- select--") %>
            <%: Html.ValidationMessage("StateID")%>
        </div>

Сначала я получил ошибку проверки рядом с списком выбора состояний (для StateID), который сказал, например, «8 не является допустимым значением».Так что он не обновляется.

Насколько я понимаю, прочитав несколько постов (, например, этот ), возникает проблема, связанная с обновлением отношений с помощью базы данных путем установки идентификатораи что решение, кажется, состоит в том, чтобы установить ENTITY вместо этого.(Кстати, противоположный совет также распространяется здесь ).Следуя этому совету, я смотрел на перегруженные функции Html.DropDownList (), чтобы установить «значение» элемента списка для самого объекта, в то время как для свойства «text» присвоено Object.Name - я не решил эту проблемуеще.Но поскольку это начинание становится все более трудоемким, я был бы очень признателен за совет специалиста.

Поэтому мои вопросы таковы: действительно ли это сработает, если я начну?И возможно ли заставить SelectList работать таким образом (и любые предложения относительно того, как)?

Спасибо за ваше время,

Тим.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

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

           <%:Html.DropDownListFor(m => m.Id, new SelectList(Model.Categories, "Id", "Name", Model.Product.CategoryId, "-Select-")%>

Используйте DTO для отображения списка, как вещи.Объекты могут быть использованы для создания, обновления, удаления

0 голосов
/ 25 ноября 2010

Как правило, не рекомендуется передавать модель вашего домена в View (за исключением, возможно, представлений в списке).

Лучше использовать (прокси) ViewModel, которая является упрощенной версией модели вашего домена.,Это немного больше работы, но работает как шарм.

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