RadzenTemplateForm Submit Error

I am having a problem submitting a form wrapped in a dialog. When I press the submit button, I get the "An unhandled error has occurred" message. I'm not sure what I am doing wrong. I'm hoping a second eye can help me out.

I know the FormSubmit method is never called. Here is my code:

@page "/add-edit-query-parameter"
@inherits BaseLightwavePage
<PageTitle>Query Parameter</PageTitle>
<RadzenDialog />
<RadzenColumn SizeMD=12>
    <RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save QueryParameter</RadzenAlert>
    <RadzenTemplateForm TItem="Lightwave.Data.QueryParameter" Data="@queryParameter" Method="post" Visible="@(queryParameter != null)" Submit="@FormSubmit">
        <ChildContent>
            <RadzenCard>
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Parameter Name" Component="ParameterName" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenTextBox style="display: block; width: 100%" @bind-Value="@queryParameter.ParameterName" Name="ParameterName" />
                        <RadzenRequiredValidator Component="ParameterName" Text="Parameter Name is required" />
                    </RadzenColumn>
                </RadzenRow>
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Parameter Type" Component="ParameterType" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenDropDown Data="@queryParameterTypeList" @bind-Value="@queryParameter.ParameterTypeValueString" ValueProperty="StringValue" TextProperty="Name" />
                        <RadzenRequiredValidator Component="ParameterType" Text="Parameter Type is required" />
                    </RadzenColumn>
                </RadzenRow>
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Data Type" Component="DataType" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenDropDown Data="@dataTypeList" @bind-Value="@queryParameter.DataTypeValueString" ValueProperty="StringValue" TextProperty="Name" />
                        <RadzenRequiredValidator Component="DataType" Text="Data Type is required" />
                    </RadzenColumn>
                </RadzenRow>
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Label" Component="Label" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenTextBox style="display: block; width: 100%" @bind-Value="@queryParameter.Label" Name="Label" />
                        <RadzenRequiredValidator Component="Label" Text="Label is required" />
                    </RadzenColumn>
                </RadzenRow>
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Dynamic Parameter" Component="DynamicParameter" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenDropDownDataGrid Data="@dynamicParametersForDynamicParameterId"
                                                AllowClear="true"
                                                TextProperty="DynamicParameterName"
                                                ValueProperty="DynamicParameterId"
                                                Placeholder="Choose DynamicParameter"
                                                style="display: block; width: 100%"
                                                @bind-Value="@queryParameter.DynamicParameterId"
                                                Name="DynamicParameterId"
                                                SelectedValue=@dynamicParametersForDynamicParameterIdValue
                                                Count=@dynamicParametersForDynamicParameterIdCount
                                                LoadData=@dynamicParametersForDynamicParameterIdLoadData />
                    </RadzenColumn>
                </RadzenRow>
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Required" Component="Required" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenCheckBox @bind-Value="@queryParameter.Required" Name="Required" />
                    </RadzenColumn>
                </RadzenRow>               
                <RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Display Order" Component="DisplayOrder" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenNumeric style="display: block; width: 100%" @bind-Value="@queryParameter.DisplayOrder" Name="DisplayOrder" />
                    </RadzenColumn>
                </RadzenRow>
                <RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
                    <RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat" />
                    <RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick" />
                </RadzenStack>
            </RadzenCard>
        </ChildContent>
    </RadzenTemplateForm>
</RadzenColumn>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.JSInterop;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using Radzen;
using Radzen.Blazor;
using Lightwave.Common;
using Lightwave.Data;

namespace Lightwave.Client.Pages
{
    public partial class AddEditQueryParameter : BaseLightwavePage
    {
        [Parameter]
        public dynamic Mode
        {
            get;
            set;
        }
        [Parameter]
        public dynamic QueryParameter
        {
            get
            {
                return queryParameter;
            }
            set
            {
                queryParameter = value;
            }
        }
        protected override async Task OnPageInitializedAsync()
        {
            queryParameter = new QueryParameter();
        }
        protected bool errorVisible;
        protected QueryParameter queryParameter;
        protected IEnumerable<DynamicParameter> dynamicParametersForDynamicParameterId;

        protected IEnumerable<Lightwave.Data.Query> queriesForQueryId;
        protected IEnumerable<EnumValueName> queryParameterTypeList = EnumUtil.GetEnumKeyValues<QueryParameterType>();
        protected IEnumerable<EnumValueName> dataTypeList = EnumUtil.GetEnumKeyValues<QueryParameterDataType>();
        protected int dynamicParametersForDynamicParameterIdCount;
        protected DynamicParameter dynamicParametersForDynamicParameterIdValue;
        protected async Task dynamicParametersForDynamicParameterIdLoadData(LoadDataArgs args)
        {
            try
            {
                var result = await LightwaveDataService.DynamicParameterDataService.GetDynamicParameters(top: args.Top, skip: args.Skip, count: args.Top != null && args.Skip != null, filter: $"{args.Filter}", orderby: $"{args.OrderBy}");
                dynamicParametersForDynamicParameterId = result.Value.AsODataEnumerable();
                dynamicParametersForDynamicParameterIdCount = result.Count;

                if(!object.Equals(queryParameter.DynamicParameterId, null))
                {
                    var valueResult = await LightwaveDataService.DynamicParameterDataService.GetDynamicParameters(filter: $"DynamicParameterId eq {queryParameter.DynamicParameterId}");
                    var firstItem = valueResult.Value.FirstOrDefault();
                    if(firstItem != null)
                    {
                        dynamicParametersForDynamicParameterIdValue = firstItem;
                    }
                }

            }
            catch(System.Exception ex)
            {
                NotificationService.Notify(new NotificationMessage() { Severity = NotificationSeverity.Error, Summary = $"Error", Detail = $"Unable to load DynamicParameter" });
            }
        }

        protected int queriesForQueryIdCount;
        protected Lightwave.Data.Query queriesForQueryIdValue;
        protected async Task queriesForQueryIdLoadData(LoadDataArgs args)
        {
            try
            {
                var result = await LightwaveDataService.QueryDataService.GetQueries(top: args.Top, skip: args.Skip, count: args.Top != null && args.Skip != null, filter: $"{args.Filter}", orderby: $"{args.OrderBy}");
                queriesForQueryId = result.Value.AsODataEnumerable();
                queriesForQueryIdCount = result.Count;

                if(!object.Equals(queryParameter.QueryId, null))
                {
                    var valueResult = await LightwaveDataService.QueryDataService.GetQueries(filter: $"QueryId eq {queryParameter.QueryId}");
                    var firstItem = valueResult.Value.FirstOrDefault();
                    if(firstItem != null)
                    {
                        queriesForQueryIdValue = firstItem;
                    }
                }

            }
            catch(System.Exception ex)
            {
                NotificationService.Notify(new NotificationMessage() { Severity = NotificationSeverity.Error, Summary = $"Error", Detail = $"Unable to load Query" });
            }
        }
        protected Task FormSubmit()
        {
            try
            {
                DialogService.Close(queryParameter);
            }
            catch(Exception ex)
            {
                errorVisible = true;
            }
            return Task.CompletedTask;
        }

        protected async Task CancelButtonClick(MouseEventArgs args)
        {
            DialogService.Close(null);
        }

    }
}

Any help would be greatly appreciated.

1 Like

Try InvalidSubmit event, it will be raised if the form is invalid.

I found the problem:

<RadzenRow style="margin-bottom: 1rem">
                    <RadzenColumn SizeMD="4">
                        <RadzenLabel Text="Parameter Type" Component="ParameterType" style="width: 100%" />
                    </RadzenColumn>
                    <RadzenColumn SizeMD="8">
                        <RadzenDropDown Data="@queryParameterTypeList" @bind-Value="@queryParameter.ParameterTypeValueString" ValueProperty="StringValue" TextProperty="Name" />
                        <RadzenRequiredValidator Component="ParameterType" Text="Parameter Type is required" />
                    </RadzenColumn>
                </RadzenRow>

The RadzenDropDown does not have the Name attribute associated with it. Thanks.