November Happy Hour will be moved to Thursday December 5th.

Submit button disabled in Forms after upgrade to CSM 12

Vote:
 

Hi!

After upgrading from 11 to 12 I cannot longer submit Forms if the checkbox "Save form entries" (freely translated from Swedish) is not checked.
If the checkbox is not checked I get an message that says: "The ability to save data for this form has been turned off." and the submit button is disabled.
If I check the box I can submit the form and the message dissapears.

Any ideas what I am missing?

Thanks!

/Kristoffer

#289010
Oct 11, 2022 15:11
Vote:
 

Hi!

In the submit button element I find this:

@*
    ====================================
    Version: 5.0.0.0. Modified: 20210818
    ====================================
*@

@using EPiServer.Forms.Implementation.Elements
@using EPiServer.Forms.Helpers.Internal
@model SubmitButtonElementBlock

@{ var formElement = Model.FormElement;
    var buttonText = Model.Label;
    var buttonDisableState = Model.GetFormSubmittableStatus(ViewContext.HttpContext);
    var cssClasses = Model.GetValidationCssClasses(); }

<button id="@formElement.Guid"
        name="submit"
        type="submit"
        value="@formElement.Guid"
        data-f-is-finalized="@Model.FinalizeForm.ToString().ToLower()"
        data-f-is-progressive-submit="true"
        data-f-type="submitbutton"
        data-f-element-name="@formElement.ElementName"
        @Html.Raw(Model.AttributesString)
        @buttonDisableState
        class="@(Model.Image == null ? "Form__Element FormExcludeDataRebind FormSubmitButton " + cssClasses : "Form__Element FormExcludeDataRebind FormSubmitButton FormImageSubmitButton " + cssClasses)">
    @if (Model.Image == null)
    {
        @buttonText
    }
    else 
    {
        <img src="@Model.Image.Path" data-f-is-progressive-submit="true" data-f-is-finalized="@Model.FinalizeForm.ToString().ToLower()" alt="@buttonText" />
    }
</button>

and the disabled button comes from this:

    var buttonDisableState = Model.GetFormSubmittableStatus(ViewContext.HttpContext);

And tha code is this:

public string GetFormSubmittableStatus(HttpContext context)
        {
            string empty = string.Empty;
            SubmittableStatus submittableStatus = _dataSubmissionService.Service.GetSubmittableStatus(FormElement.Form, context);
            if (submittableStatus == null)
            {
                return empty;
            }

            if (!submittableStatus.Submittable)
            {
                return "disabled";
            }

            return empty;
        }

and this:

public virtual SubmittableStatus GetSubmittableStatus(IForm form, HttpContext context)
{
    if (context == null || form == null)
    {
        return new SubmittableStatus
        {
            Submittable = false,
            Message = LocalizationService.GetString("/episerver/forms/messages/formsubmission/outdatedforminit")
        };
    }

    if (IsMalFormSteps(form))
    {
        return new SubmittableStatus
        {
            Submittable = false,
            Message = LocalizationService.GetString("/episerver/forms/viewmode/malformstepconfigruation")
        };
    }

    if (!form.AllowAnonymousSubmission && (IsAnonymousAccess(context) || !_aggregatedPersonalizationEvaluator.Service.Personalize()))
    {
        return new SubmittableStatus
        {
            Submittable = false,
            Message = LocalizationService.GetString("/episerver/forms/messages/formsubmission/requirelogin")
        };
    }

    if (!form.AllowMultipleSubmission && HasAlreadyPosted(form.FormGuid, context))
    {
        return new SubmittableStatus
        {
            Submittable = false,
            Message = LocalizationService.GetString("/episerver/forms/messages/formsubmission/denymultisubmit")
        };
    }

    if (_submissionStorageFactory.Service.GetStorage(new FormIdentity
    {
        Guid = form.FormGuid
    }) is SessionStorage && context?.Features.Get<ISessionFeature>() == null)
    {
        return new SubmittableStatus
        {
            Submittable = false,
            Message = LocalizationService.GetString("/episerver/forms/messages/formsubmission/sessionoff")
        };
    }

    return new SubmittableStatus
    {
        Submittable = true,
        Message = ""
    };
}

But in the last code I cannot find anything about the "Save postings" checkbox.
Why is that code returning false if I don't check the "Save postings" checkbox? I don't get it.
Our form allows anonymous submits.

The error message in Swedish is:
"Möjligheten att spara data för det här formuläret har stängts av."

Thanks!

/Kristoffer

#290999
Nov 02, 2022 16:55
Vote:
 

Got an answer from Optimizely support that directed me here:

https://webhelp.optimizely.com/18-5/addons/episerver-forms/creating-a-form.htm

If "Store form submissions" is not enabled the anbser will be stored in the users session. If Session state for you application is disabled the form cannot be submitted.
Session state is disabled per default in net core and this is how you enable it:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-6.0

Thanks Hui Shi in the Application Support Team.

/Kristoffer

#292796
Edited, Dec 07, 2022 13:56
This topic was created over six months ago and has been resolved. If you have a similar question, please create a new topic and refer to this one.
* 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.