London Dev Meetup Rescheduled! Due to unavoidable reasons, the event has been moved to 21st May. Speakers remain the same—any changes will be communicated. Seats are limited—register here to secure your spot!

XForm, MVC, preserving input values after custom validation

Vote:
0

Hi!

I've managed to build nice little custom validation for my MVC/XForm page. I added recaptcha validation which works nicely. But what doesn't work is that all the input-fields in the form are blank after validation fails (for example, user hasn't provided valid email). I want those fields to contain the same value user entered after post.

Here's some code. This is from the view. Model.Page.Form property contains the XForm object.

@Html.PropertyFor(m => m.Page.Form, new { XFormParameters = new EPiServer.XForms.Util.XFormParameters() { PostAction = "Post", SuccessAction = "Success", FailedAction = "Failed"} })

    

This is from the controller.

        [AcceptVerbs(HttpVerbs.Post)]
        public virtual ActionResult Post(FormPage currentPage, XFormPostedData xFormPostedData)
        {
            VerifyRecaptcha()
            if (ModelState.IsValid)
            {
                var data = new XFormPageHelper().GetXFormData(this, xFormPostedData);
                XFormActionHelper.DoAction(data, xFormPostedData, true);
                return Success(currentPage, currentPage);
            }
            return Failed(currentPage, xFormPostedData);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public virtual ActionResult Success(FormPage currentPage, XFormPostedData xFormPostedData)
        {
            return Redirect("/to/other/page");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public virtual ActionResult Failed(FormPage currentPage, XFormPostedData xFormPostedData)
        {
            return Index(currentPage);
        }

    

How do I tell XForm object to render user posted data back to user in Failed-method?

#65751
Feb 07, 2013 14:15
Vote:
0

Btw. There's a bug in the code above. Don't mind it.

return Success(currentPage, currentPage);

Should be

return Success(currentPage, xFormPostedData);

I had to clean up the code and just copypasted it incorrectly.

#65752
Feb 07, 2013 14:20
Vote:
0

It seems that XFormPageUnknownActionHandler was the answer.

#65764
Feb 08, 2013 7:03
Vote:
0

Hi Marko

Could you please send some details on how you used the XFormPageUnknownActionHandler?

#78933
Dec 05, 2013 10:54
This thread is locked and should be used for reference only. Please use the Episerver CMS 7 and earlier versions forum to open new discussions.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.