2009-01-20 3 views
0

Я хотел бы знать мысли людей о том, как лучше всего сделать обратное к Phil Haack's Model Binding To A List. У меня есть форма, которая содержит несколько отдельных полей, а также поля формы, которые динамически создаются с использованием JQuery. Это означает, что когда я запрашиваю базу данных для редактирования, она возвращает объект, который сам по себе будет иметь n количество объектов (каждый один и тот же), прикрепленный к нему.Напротив «привязки модели к списку»

Я хотел бы знать, что люди предложили бы как лучший способ создания «динамических» частей форм и, в частности, обеспечить выбор правильных элементов для выпадающих списков. У меня есть смутное представление о том, что это будет включать в себя элементы управления пользователями, но я борюсь с тем, как собрать все это вместе.

Форма:

<form action="/MyItems/Edit" method="post"> 
    Title: <input type="text" name="Title" value="" /><br /> 
    Description <input type="text" name="Description" value="" /><br /><br /> 

    <input type="hidden" name="myItem.Index" value="0" /> 
    <input id="item[0].Amount" name="item[0].Amount" type="text" value="" /> 
    <select id="item[0].selectA"><option value="1">1</option> 
    <option value="2">2</option><option value="3">3</option></select> 
    <select id="item[0].selectB"><option value="1">1</option> 
    <option value="2">2</option><option value="3">3</option></select> 

    <input type="hidden" name="myItem.Index" value="1" /> 
    <input id="item[1].Amount" name="item[1].Amount" type="text" value="" /> 
    <select id="item[1].selectA"><option value="1">1</option> 
    <option value="2">2</option><option value="3">3</option></select> 
    <select id="item[1].selectB"><option value="1">1</option> 
    <option value="2">2</option><option value="3">3</option></select> 

    <input type="hidden" name="myItem.Index" value="2" /> 
    <input id="item[2].Amount" name="item[2].Amount" type="text" value="" /> 
    <select id="item[2].selectA"><option value="1">1</option> 
    <option value="2">2</option><option value="3">3</option></select> 
    <select id="item[2].selectB"><option value="1">1</option> 
    <option value="2">2</option><option value="3">3</option></select> 
</form> 

Все от скрытого ввода до конца второго списка выбора можно повторить п раз. DTO, что в настоящее время гидратированный из запроса базы данных выглядит следующим образом:

public class MyItem 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public IEnumerable<SelectItem> SelectItems { get; set; } 
} 

Каждый SelectItem тогда выглядит следующим образом:

public class SelectItem 
{ 
    public int SelectA { get; set; } 
    public int SelectA { get; set; } 
} 

Я надеюсь, что я объяснил это хорошо, спасибо заранее для тех, кто взяв чтобы посмотреть на это.

ответ

0

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

1

Обертывание это в либо UserControl или собственный метод расширения HtmlHelper бы прибраться вид, но по сути вы хотите что-то вроде этого:

<% int idx = 0; 
    foreach (SelectItem item in myItem.SelectItems) { %> 
<input type="hidden" name="myItem.Index" value="<%= idx %>" /> 
<input id="item[<%= idx %>].Amount" name="item[<%= idx %>].Amount" type="text" value="" /> 
<select id="item[<%= idx %>].selectA"> 
    <option <%= item.selectA == 1 ? "selected" : "" %> value="1">1</option> 
    <option <%= item.selectA == 2 ? "selected" : "" %> value="2">2</option> 
    <option <%= item.selectA == 3 ? "selected" : "" %> value="3">3</option> 
</select> 
<select id="item[<%= idx %>].selectB"> 
    <option <%= item.selectB == 1 ? "selected" : "" %> value="1">1</option> 
    <option <%= item.selectB == 2 ? "selected" : "" %> value="2">2</option> 
    <option <%= item.selectB == 3 ? "selected" : "" %> value="3">3</option> 
</select> 
<% idx++; 
    } %> 

Have, что завернутые в ваших form теги и он должен оказывать просто отлично, если предположить, что ваш экземпляр MyItem называется myItem. Вы могли бы обернуть повторяющиеся теги option в другом цикле, если у вас были и ваши значения в коллекции.

+0

Спасибо, Giraffe, я буду хорошо смотреть на это завтра утром и обязательно отвечу. – dave

Смежные вопросы