2010-06-17 3 views
5

На моем веб-сайте ASP.NET MVC часть функции позволяет пользователю вводить часы, когда открыто определенное место.Связывание модели ASP.NET MVC в список

Я решил хранить эти часы в таблице VenueHours в моей базе данных, с отношением FK-to-PK к таблице Venues, а также параметрами DayOfWeek, OpeningTime и ClosingTime.

В моем представлении я хочу разрешить пользователю вводить только те данные, о которых они знают; другими словами, некоторые дни не могут быть заполнены для Место проведения. Я собираюсь создать флажки, которые пользователь может проверить, чтобы включить поля InitTime и ClosingTime для DayOfWeek, к которым принадлежит флажок.


Мой вопрос относится к , как передать эту информацию на мой HttpPost контроллер действий.

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

Могу ли я каким-то образом связать просмотр информации в списке, который передан моему действию? Это также поможет мне, если я столкнусь с сценарием, в котором нет предела тому, сколько информации может заполнить пользователь.

ответ

13

Скотт Ханзельман опубликовал сообщение very good article о том, как связующее устройство по умолчанию имеет дело с коллекциями, массивами и словарями. Это здорово, если вы не хотите писать настраиваемое связующее устройство, хотя написание специального связующего материала не так уж и важно.

+0

Отлично! Постараюсь использовать это. –

+0

Кроме того, возможно ли использовать атрибут [Bind (Exclude = "...")], чтобы не связывать некоторые параметры внутри каждого объекта в Списке? –

1

Пожалуйста, попробуйте следующие шаги

1 - Поместить все входные коробки (которые могут быть заселены DatePicker управления JQuery) внутри DIV в представлении ASPX.

2 - с помощью селекторов Jquery для захвата всех значений (внутри указанного выше DIV), которые должны быть отправлены методу действия, в массив JavaScript на стороне клиента.

см Filtering input elements inside DIV

var enteredVenueHours = new Array(); 
for(var i=0;i < inputsInsideDiv.length;i++) 
{ 
    // add the elements to the JS array 
} 

3 - Используйте пост Jquery отправить enteredVenueHours обратно в действие контроллера **

$.post('<%=Url.Action("ActionMethod")%>',{ EnteredVenueHours: enteredVenueHours,function (data) 
{ 
    // Udpate status to be displayed here. 
}); 

4 - Убедитесь, что метод действия контроллера имеет следующую подпись

[AcceptVerbs(HTTP.Post)] 
public ActionResult ActionMethod(List<string> EnteredVenueHours) 
{ 
    // Have the DB persistance logic . 
} 
Смежные вопросы