Почему шаблон MVC Core View не генерирует код для коллекций? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть модель вида, которая выглядит примерно так:

public class OfferEnquiry
{
    public string Name { get; set; }
    public string Id { get; set; }
    public List<Offer> Offers { get; set; }
}

Я создал для этого представление, которое выглядит примерно так (соответствующая часть):

<div>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Name)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Name)
        </dd>
        <dt>
                @Html.DisplayNameFor(model => model.Id)
            </dt>
            <dd>
                @Html.DisplayFor(model => model.Id)
            </dd>
               </dl>
</div>

Обратите внимание, что нет кода, который перебирает коллекцию предложений. Могу ли я попросить шаблон сгенерировать этот код?

Если ответ «нет», пожалуйста, продолжайте читать. Если ответ «да», не продолжайте чтение и просто дайте мне знать, как автоматически создать коллекцию.

Я написал код ниже:

foreach (var item in Model.Offers)
{
    <table border="1">
        <tr>
            <td>
                @Html.DisplayFor(m => item.Description)
            </td>
        </tr>
    </table>
}

Хотя приведенный выше код работает, мне интересно, можно ли его улучшить.

1 Ответ

1 голос
/ 18 апреля 2019

Строительные леса не перебирают списки, потому что для этого нужно сделать слишком много предположений.Достаточно просто перечислить пары ключ-значение из модели (имена и значения свойств) или в случае представления создания / редактирования, меток и входных данных.Однако для коллекций неясно, как поступить.Любой выбор, который леса могут разумно сделать, почти наверняка не сработает для того или иного сценария.Проблема усугубляется созданием / редактированием представлений, поскольку для создания повторяющихся полей обычно требуется JavaScript (для динамического добавления / удаления наборов этих полей).Мало того, что было бы практически невозможно написать JavaScript, который охватил бы каждую возможную ситуацию, но это также создало бы жесткие зависимости, которые почти наверняка были бы оскорбительными для некоторых разработчиков.

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

Что касается вашего текущего кода.Невозможно сказать, можно ли это «улучшить» или нет, потому что мы не знаем вашего домена или требований.Это, конечно, приемлемо и будет работать, но это лучший способ или даже то, как это должно быть сделано в зависимости от вашего домена и требований?Кто знает?В любом случае, такой вопрос не имеет отношения к переполнению стека.По сути, вы просите пересмотреть код, а это не сайт для этого.

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