使用注册到BizFormItemEvent的方法设置Kentico BizForm的错误消息

时间:2016-11-21 03:03:07

标签: c# asp.net kentico

我已经向BizFormItemEvent.Insert.Before注册了一个方法,用于检查用户是否已经存在,并在表单中提供了电子邮件地址,如果用户没有,则创建一个用户。

如果用户 存在该电子邮件地址,那么我想显示错误消息。问题是,如果您尝试调用e.Cancel()或抛出异常,BizForm只会显示通用"An error occurred when saving data. Please see event log for more details"消息,而我不确定如何更改该消息。

这是我到目前为止所做的事情:

using CMS.Base;
using CMS.OnlineForms;
using System;

/// <summary>
/// Partial class that allows you to register custom handler methods and classes.
/// Adds the CustomFormHandlers attribute to the partial class.
/// </summary>
[CustomFormHandlers]
public partial class CMSModuleLoader
{
    /// <summary>
    /// Custom attribute class.
    /// </summary>
    private class CustomFormHandlers : CMSLoaderAttribute
    {
        /// <summary>
        /// Called automatically when the application starts
        /// </summary>
        public override void Init()
        {
            BizFormItemEvents.Insert.Before += FormItem_InsertBeforeHandler;
        }

        /// <summary>
        /// Handles the form data when users create new records for forms
        /// </summary>
        private void FormItem_InsertBeforeHandler(object sender, BizFormItemEventArgs e)
        {
            BizFormItem formDataItem = e.Item;

            if (formDataItem != null && formDataItem.BizFormClassName == "bizform.formname")
            { 
                // CreateUser returns false if a duplicate email is found
                if(!CreateUser(formDataItem))
                {
                    // Something needs to happen here that
                    // changes the error message of the bizform
                    // e.Cancel();
                    throw new Exception("A user with this email address already exists.");
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

我会创建一个自定义表单控件,并在 IsValid 方法中实现验证。示例here

答案 1 :(得分:1)

我不确定你能在BizFormItemEvent.Insert.Before事件中做到这一点。尝试为该字段实现自定义验证规则:

  • 会阻止表单保存
  • 它将允许您指定验证错误消息