2015-10-12 3 views
-2

Wonder, если кто-то может помочь мне здесь ......Pass модели обратно на страницу

В основном то, что я пытаюсь сделать, если на вывешивания формы, я делаю некоторые пользовательские проверки и если предоставленные данные не соответствуют бизнесу, я хотел бы прекратить обработку (очевидно!) и передать входящую модель обратно в представление, содержащее форму, чтобы пользователь не должен был повторно вводить все их данных.

То, как я установить это есть (Это использование Umbraco как CMS):

1) Я создал модель/свойства. 2) Я тогда создал сильно типизированный частичный вид и выбранный класс модели, который я только что создал (названный AwardsCeremony) 3) Я тогда создал контроллер со следующим Index ActionResult:

public ActionResult Index() 
    { 
     TempData["priceList"] = getPrices(); 
     TempData["qualificationList"] = getQualifications(); 

     return PartialView("AwardsCeremony", new AwardsCeremonyViewModel()); 
    } 

4) Затем в шаблоне Umbraco Я звоню контроллер

@Html.Action("Index", "AwardsCeremonySurface") 

(это Umbraco наследует это стиль, и т.д. из шаблона Master (в Umbraco)).

В представлении (на событии HTTPPOST) я вызываю процесс обработки событий на контроллере.

@using (Html.BeginUmbracoForm("processBooking", "AwardsCeremonySurface", null, new { @class = "form-horizontal" })) 

Это ActionResult затем делает проверку ошибок и что, где начинаются проблемы (!), Я удалил свою пользовательскую проверку для удобства чтения.

[HttpPost] 
    public ActionResult processBooking(AwardsCeremonyViewModel model) 
    { 
     //Do the custom error handling 

     if (myInvalidForm == true) 
     { 
      return PartialView("AwardsCeremony",model); 
     } 

     //Process the booking 

     return RedirectToCurrentUmbracoPage(); 
    } 

Что происходит, что, когда частичный вид возвращается обратно стиль страницы теряется, форма отображается, но ни с одним из унаследованного стиля, классов и т.д. от Мастера шаблонов Umbraco, и я просто не» t знать, как исправить. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?

Спасибо, Craig

ответ

-1

Конечно моделирование теряется. Вы буквально возвращаете частичное представление как ответ, который не будет включать в себя макет вашего сайта. Вы хотите вернуть полный ViewResult, то есть return View(model), и представление должно быть тем же самым представлением, которое вы использовали для своего действия GET, а не частичного.

+0

Cheers bud, я понимаю, почему стиль утерян. Я просто не знаю, что с ним делать (!), Если я возвращаюсь пользователем (модель), тогда я получаю сообщение об ошибке «processBooking» или его мастер не найден, или никакой механизм просмотра не поддерживает найденные местоположения. Были обысканы следующие местоположения: – SxChoc

+0

Вид должен быть таким же, как тот, который вы использовали для вашего запроса GET. Если вы полагаетесь на загрузку представления на основе конвенций в своем действии GET, и ваше действие POST не называется одинаковым, вам нужно будет явно передать имя представления: 'return View (« GetView », model);' –

+0

Не уверен, что я понимаю, что буду честным помощником, если вы предлагаете использовать синтаксис, который я должен использовать, это return View («AwardsCeremony», model); то я получаю следующую ошибку. Элемент модели, переданный в словарь, имеет тип «ICASolution.Models.AwardsCeremonyViewModel», но для этого словаря требуется элемент модели типа «Umbraco.Web.Models.RenderModel». – SxChoc

0

Реализация формы в Umbraco (на основе кода в одном из моих проектов - ваша обработка форм в HandleContactUs, скорее всего, отличаются, конечно):

Модель просто стандарт MVC.

Контроллер:

public class FormsController : SurfaceController 
{ 
    [ChildActionOnly] 
    public ActionResult ContactUs() 
    { 
     HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 
     HtmlHelper.ClientValidationEnabled = true; 

     ContactForm model = null; 
     if (TempData.ContainsKey("ContactForm")) 
     { 
      model = TempData["ContactForm"] as ContactForm; 
     } 
     if (model == null) 
     { 
      model = new ContactForm { Page = CurrentPage }; 
     } 
     return PartialView(model); 
    } 

    [HttpPost] 
    public ActionResult HandleContactUs(ContactForm model) 
    { 
     if (ModelState.IsValid) 
     { 
      string errorMsg = string.Empty; 

      TempData["ContactFormSuccess"] = model.SendMail(Umbraco, out errorMsg); 
      TempData["ContactFormErrorMessage"] = errorMsg; 
     } 
     else 
     { 
      TempData["ContactFormSuccess"] = false; 
     } 
     TempData["ContactForm"] = model; 

     if (!Request.IsAjaxRequest()) 
      RedirectToCurrentUmbracoUrl(); 

     return PartialView(model); 
    } 
} 

Примечание:

  1. Форма оказываемая ContactUs действий в то время как он обрабатывается HandleContactUs сообщения действий.
  2. Действия обработчика проверяют сообщение ajax - если оно не отправлено назад, тогда мы делаем RedirectToUmbracoUrl(), иначе мы просто возвращаем частичный вид, поскольку мы используем javascript для замены формы обработанным представлением (обычно это сообщение благодарности и т. Д.).)
  3. На самом деле вам не нужно включать ключевое слово Surface в имя вашего контроллера - в то время как документы все еще указывают на то, что вы это делаете, он был удален как требование некоторое время назад.

Вид:

~ \ Views \ Forms \ ContactUs.cshtml:

Использование стандартного UmbracoBeginForm:

@using (Html.BeginUmbracoForm<FormsController>("HandleContactUs", null, 
     new { @class = "form-horizontal" })) 
{ 

} 

Использование MS MVC Ajax.BeginForm:

@using (Ajax.BeginForm("HandleContactUs", "Forms", null, 
     new AjaxOptions { UpdateTargetId = "contactForm", 
          OnBegin = "contactBegin", 
          OnFailure = "contactFailure" }, 
     new { @class = "form-horizontal" })) 
{ 

} 

Конечно, вам также понадобится javascript callb ack contactBegin, contactFailure или независимо от вашей конфигурации AjaxOptions.

Я использовал этот подход для нескольких проектов без каких-либо проблем.

+0

Привет, Роберт, извините, я только что подобрал это. Я дам этому вихрь в выходные и отчитаюсь – SxChoc

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