Привязка модели ASP.NET MVC к списку - PullRequest
5 голосов
/ 17 июня 2010

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

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

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


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

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

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

Ответы [ 2 ]

13 голосов
/ 17 июня 2010

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

1 голос
/ 17 июня 2010

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

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

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

см. Фильтрация входных элементов внутри DIV

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

3 - Используйте сообщение Jquery, чтобы отправить введенное значениеVenueHours обратно в действие контроллера **

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

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

[AcceptVerbs(HTTP.Post)]
public ActionResult ActionMethod(List<string> EnteredVenueHours)
{
     // Have the DB persistance logic .
}
...