В моем сайте MVC ASP.NET часть функции позволяет пользователю вводить часы, когда определенное место проведения открыто.
Я решил сохранить в эти часы в таблице VenueHours в моей базе данных, с отношениями FK к PK к таблице Venues, а также DayOfWeek, OpeningTime и параметрами ClosingTime.
По моему мнению, я хочу позволить пользователю только вводить времена, о которых они знают; другими словами, несколько дней не могут быть заполнены в для Места проведения. Я думаю о создании флажков, которые пользователь может проверить для включения полей OpeningTime и ClosingTime для DayOfWeek, которому принадлежит флажок.
Мой вопрос касается, как передать эту информацию моему Действию Контроллера HttpPost.
Поскольку я знаю максимальную сумму Дней, которые могут быть переданы в (7), я мог, конечно, просто записать 7 параметров nullable VenueHour в свое Действие, но я уверен, что существует лучший путь.
Я могу так или иначе связать информацию о Представлении в Список, который передается моему Действию? Это также поможет мне, если я столкнусь со сценарием, где нет никакого предела тому, сколько информации пользователь может заполнить.
Скотт Хансельман опубликовал очень хорошую статью о том, как связыватель моделей по умолчанию работает с коллекциями, массивами и словарями. Это замечательно, если вы не хотите писать настраиваемую подшивку модели, хотя написать настраиваемую подшивку модели не так уж и сложно.
Пожалуйста, попробуйте выполнить следующие действия
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 post, чтобы отправить введенные значенияVenueHours обратно в действие контроллера**
$.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 .
}