One option is to redirect to the original page using a form.
Include the form to fill in the fields through the query string using the ReadQueryString property, using the view information of the Renderer form:

So, on false your Save Action you create a collection of query strings with the name of each field, as it appears in the form, followed by the user value.
The code below will cover all your fields and arrange them in a QueryString with its Name and Value field;
string urlOfForm = HttpContext.Current.Request.Url.AbsolutePath; var queryString = new StringBuilder("?"); foreach (AdaptedControlResult field in fields) { queryString.Append(string.Format("{0}={1}&", field.FieldName, field.Value)); } urlOfForm = urlOfForm + queryString; HttpContext.Current.Response.Redirect(urlOfForm);
Sitecore will then automatically fill in the appropriate fields with the values, fulfilling your requirements.
EDIT
I found that most of the thrown exceptions will return the user to the form with the values populated. Then you can pass the reason for the refusal to write to CRM. Example below
if (submitFailed) { throw new Exception("The email address entered already exists in our System"); }
The complex dynamics then replaces the Save Action Failed Message to show this Exception Message . All the messages that I find in the user’s Save Action message show that the only real approach is to redirect through the custom Save Action to another page with another message. This is not suitable for your requirements.
I found the Args pipeline that you will need to fix FormSubmitFailedArgs and SubmitFailedArgs . For the former, the following change will be required
public FormSubmitFailedArgs(ID formID, AdaptedResultList fields, ID actionFailed, Exception ex) : base(formID, actionFailed, ex) { this.Fields = fields; this.ErrorMessage = ex.Message; }
and the latter will need
public SubmitFailedArgs(ID formID, ID actionFailed, string errorMessage, Exception innerException) { this.FormID = formID; this.ActionFailed = actionFailed; this.ErrorMessage = innerException.Message; this.InnerException = innerException; }
Location and style of message sending:
You need to find the sublayout file for FormRender, by default it is website\sitecore modules\Web\Web Forms for Marketers\Control\SitecoreSimpleFormAscx.ascx , there you will find a componentt named SubmitSummary that displays the send message, so move it to where you need .
Also note that it refers to the CssClass scfSubmitSummary , this is what you will need to configure in order to change the message style. This answer is already REALLY long, so I will not give a blow to the blow, how to change the style of this class, see here, for example, http://www.awareweb.com/awareblog/10-1-13-wffmguide
Pipeline Patrol
I went deeper into using the custom Args that we created to use the error message, you will need to control the Pipeline, which ultimately uses these Args, this is the Sitecore.Form.Core.Pipelines.FormSubmit.FormatMessage, Sitecore.Forms.Core processor Sitecore.Form.Core.Pipelines.FormSubmit.FormatMessage, Sitecore.Forms.Core in <errorSubmit> Pipeline.
From my research, this should not be a big effort, so its question on how to fix it can be changed if Sitecore.Forms.config directly or using patch:instead from the configuration file in the App_Config/Includes folder - see here for more details .