I couldn't find even one tutorial that correctly and fully explains how to make a form with validation.
More specifically I have the following issue - when the errors are passed, the filled content by the user is lost.
I am using Umbraco v7, but I imagine the concept is the same with 8 and 9?!
Option 1
Generally, what people do in the tutorials is that there is 1 action RenderForm
(get) and then another SubmitForm
(post). From what I get, if validation fails, you have to call CurrentUmbracoPage()
to basically reload the .cshtml
page and include this data. This is where the problem come in: the render from is done through an action which usually looks like that:
Html.RenderAction("RenderForm", "Contact", new ViewModel());
and thus it resets the data to a new blank Model. I still have the errors, but whatever the user prefilled is now lost. I imagine there must be a way to just pass the model here, but I couldn't find out how.
Option 2
An alternative way of dealing with forms is to have only the POST controller action and load the form through a partial in the .cshtml
:
Html.RenderPartial("~/Views/Partials/Forms/_ContactUsForm.cshtml", new ViewModel());
which brings us to the same problem - errors show but ViewModel
data is blanked.
I tried calling it without a model, but it throws an error. I would expect you could prepare the model, and then just use it in the .cshtml
or the partial .cshmtml
but I wasn't able to find out how.
By prepare model
I mean that I have to set a bunch of variables, prefill information, set dropdowns etc. before I render form. This should be done in the controller somehow before I load both the blank form and the filled form with errors.
My research:
The official documentation has no mention of errors: https://our.umbraco.com/Documentation/Fundamentals/Code/Creating-Forms/index-v7
These tutorials show you how to make forms but again, don't show you how to show data when form is invalid: