Длинные намотки по необходимости:Разрешение нескольких должностей из формы MVC 4 с результатами на той же странице
У меня есть строго типизированная форма MVC 4. Форма создается динамически в зависимости от текущих параметров URL. Когда пользователь отправляет форму, входные данные формы отправляются на контроллер, контроллер делает это, тогда результаты из метода контроллера должны отображаться ниже формы.
В частности, в моем случае результатом являются данные о позиции. Пользователь может нажать «отправить» столько раз, сколько захочет, и каждый раз, когда дополнительные результаты от контроллера отображаются на одной странице ниже формы; Каждый пост является добавленной позицией. (Позиции запрашиваются/сохраняются вызовом внешнего webapi, поэтому каждый раз, когда выполняется передача, я перестраиваю позиции из своего метода контроллера).
То, что я пытаюсь сделать, - это не обновлять страницу каждый раз, чтобы создавать форму заново, просто обновляя позиции под формой через вызов ajax. Форма дорого строится, потому что она также построена из внешнего веб-ави. Моя модель очень большая и имеет множество данных, хотя сама форма не является.
До сих пор я пытался поставить позиции на частичный вид, который я буду обновлять после каждого представления формы. Я отправляю форму с помощью jQuery и Ajax. То, что, кажется, происходит, представляет форму, вызывается метод ajax, но мой контроллер сразу возвращает частичный вид и макет главной страницы. Это не возврат к вызову jQuery. Это может быть Sitefinity, или это может быть то, что я делаю совершенно неправильно.
Что у меня есть до сих пор: http://beta.kentuckycenter.org/all-shows/jeff-beck. Нажмите «Купить билеты» на этой странице, чтобы просмотреть форму.
Отправить форму (нажмите «GO»), тогда форма отправляет и возвращает только частичный вид.
Но это должно выглядеть следующим образом (это дизайн только): http://www.kentuckycenter.org.staging01.spiiider.com/select-tickets.php
Sitefinity MVC виджетов изменить сложность наверняка. Моя настройка - мастер-страница (шаблоны Sitefinity построены из мастер-страниц), затем представление по умолчанию и частичное представление. Я пытаюсь обновить частичный вид внутри представления по умолчанию.
Я пробовал много разных способов, включая форму ajax.beginform, но я все еще не могу получить частичное представление для возврата в представление по умолчанию. Я не могу передать свои исходные данные SelectTicketsModel в скрытые поля, потому что некоторые элементы являются списками других моделей.
контроллера действие упрощено:
public ActionResult Index(string performanceID, string pageID)
{
var Model = new SelectTicketsModel();
Model = Model.GetPerformanceDetails(performanceIDnew, productionID);
return View("Default", Model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(GetTicketsModel Model)
{
//call webapi to reserve tickets
ticketsReserved = Model.ReserveTickets(Model.PriceType, performanceID, numberOfTickets, zoneID, Model.Accessible);
if (ticketsReserved == numberOfTickets)
{
LineItemModel lineModel = new LineItemModel();
//Fill LineItemModel from webpapi
}
return PartialView("TicketList", LineItemModel);
}
public class SelectTicketsViewModel
{
public bool Results { get; set; }
public int PerformanceID { get; set; }
public Nullable<DateTime> PreSaleDateStart { get; set; }
public Nullable<DateTime> PreSaleDateEnd { get; set; }
public bool HideSYOS { get; set; }
public bool IsGeneralAdmission { get; set; }
public bool WillCallOnly { get; set; }
public bool IsOnSale { get; set; }
public bool IsSoldOut { get; set; }
public int MaxSeats { get; set; }
public int ZoneMapID { get; set; }
public string TimeSlot { get; set; }
public string Title { get; set; }
public DateTime PerformanceDate { get; set; }
public string Location { get; set; }
// Create Lists from Models below
public List<PriceZoneModel> PriceZones { get; set; }
public List<PriceTypeModel> PriceTypes { get; set; }
public List<LineItemModel> LineItems { get; set; }
}
public class PriceZoneModel
{
public int PriceZoneID { get; set; }
public string PriceZoneDescription { get; set; }
public int PriceTypeID { get; set; }
public string PriceTypeDescription { get; set; }
public decimal Price { get; set; }
public decimal BasePrice { get; set; }
public bool Available { get; set; }
public int AvailableCount { get; set; }
public int Rank { get; set; }
}
public class PriceTypeModel
{
public int PriceTypeID { get; set; }
public string PriceTypeDescription { get; set; }
public string PriceTypeShortDescription { get; set; }
public string Category { get; set; }
public bool IsDefaultPriceType { get; set; }
public bool IsPromo { get; set; }
}
public class LineItemModel
{
int id { get; set; }
bool AccessibleSeats { get; set; }
public List<SubLineItemModel> SubLineItems { get; set; }
}
public class SubLineItemModel
{
public string Section { get; set; }
public int NumberOfSeats { get; set; }
public string SeatNumber { get; set; }
public int SeatID { get; set; }
public decimal Price { get; set; }
public string PriceTypeDescription { get; set; }
}
public class GetTicketsModel
{
//Form Values needed to Reserve Tickets
public string NumberOfTickets { get; set; }
public string PriceType { get; set; }
public string ZoneID { get; set; }
public bool Accessible { get; set; }
public string PerformanceID { get; set; }
}
Необходимо показать свое мнение, но, без сомнения, оно связано с тем, что вы не включили соответствующий 'jquery.validate-ajax.js', поэтому' Ajax.BeginForm() 'делает стандартный submit, а не ajax-вызов. Примечание. Я также отредактировал теги. Тег модели-view-controller предназначен для вопросов о шаблоне, а не о структуре MVC. –