Привязка сложной модели к списку в MVC3 - PullRequest
0 голосов
/ 16 марта 2012

Я знаю, что этот вопрос задавался ранее, но мне не удалось получить правильный HTML-код на основе полученных ответов.

Похожие вопросы:

Вот как настроен мой код:

Модель

public class CustomerOrderItem {
    public List<CustomerOrderItemSerialNumber> CustomerOrderItemSerialNumbers { get; set; }
    public int Id { get; set; }
    public string ShipperId { get; set; }
    public string OrderLineNumber { get; set; }
    public string LineNumber { get; set; }

    /// <summary>
    /// Return either an empty string (if no serial numbers already exist) or return the list of serial numbers separated by a line break for display in a textarea input.
    /// </summary>
    public string SerialNumber { get { return CustomerOrderItemSerialNumbers == null ? string.Empty : string.Join("\r\n", CustomerOrderItemSerialNumbers.Select(i => i.SerialNumber)); } }
}

Просмотр

<table id="orderItems" class="grid">
    <thead>
        <tr class="gridHeader">
            <th class="lineNumber">Line #</th>
            <th class="quantity">Quantity</th>
            <th class="sku">SKU</th>
            <th class="description">Description</th>
            <th class="serialNumber">Serial Number(s)</th>
        </tr>
    </thead>
    <tbody>
        @for (int i = 0; i < Model.Count; i++) {
            @Html.EditorFor(m => m[i])
        }
    </tbody>
</table>

Редактор

<tr class="gridrow">
    <td class="lineNumber">@Model.LineNumber</td>
    <td class="quantity">@Model.QuantityOrdered</td>
    <td class="sku">@Model.SKU</td>
    <td class="description">@Model.Description</td>
    <td class="serialNumber">
        @Html.TextAreaFor(m => m.SerialNumber)
    </td>
</tr>

Эта настройка приводит к следующему HTML (размещена только соответствующая часть):

<td class="serialNumber">
    <textarea cols="20" name="[0].SerialNumber" rows="2"></textarea>
</td>

Имя всегда отображается как [0] .SerialNumber, ноМне нужно orderItem [0] .SerialNumber.Я посмотрел на пример проекта Фила Хаака и не вижу, как он получает имя параметра.

Ответы [ 4 ]

1 голос
/ 16 марта 2012

Попробуйте это:

@Html.EditorFor(m => m[i], new ViewDataDictionary() { TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "orderItem" } })
0 голосов
/ 21 марта 2012

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

0 голосов
/ 16 марта 2012

Если вы собираетесь использовать индексы массива, я не думаю, что вам нужен шаблон редактора, но, поскольку у вас есть шаблон редактора, используйте вместо этого «foreach». Просто попробуй и скажи мне результат. Насколько я знаю, существует два подхода к привязке списка моделей:

вы просматриваете список, как список массивов [0] и т. Д., Но вы не используете шаблон редактора. или вы проходите через foreach (var item in items) EditorFor (item) ... и используете шаблон редактора ... но вы столкнулись с двумя известными мне методами, которые, возможно, вызывают ошибку.

Так что попробуйте вместо этого сделать foreach и проверьте результат.

0 голосов
/ 16 марта 2012

Используйте @Html.EditorFor() и используйте атрибут [DataType] в вашей модели, чтобы упомянуть, что он должен отображаться как текстовая область

[DataType(DataType.MultilineText)]
public string SerialNumber{ get; set; }

и в вашем представлении

@Html.EditorFor(m => m.SerialNumber)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...