Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用注册到BizFormItemEvent的方法设置Kentico BizForm的错误消息_C#_Asp.net_Kentico - Fatal编程技术网

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

C# 使用注册到BizFormItemEvent的方法设置Kentico BizForm的错误消息,c#,asp.net,kentico,C#,Asp.net,Kentico,我已经在BizFormItemEvent.Insert.Before中注册了一个方法,该方法检查用户是否已经存在,并且在表单中提供了电子邮件地址,如果没有,则创建一个用户 如果用户确实存在该电子邮件地址,则我希望显示一条错误消息。问题是,如果您试图调用e.Cancel()或抛出异常,BizForm只会显示一般的“保存数据时发生错误。有关详细信息,请参阅事件日志”消息,我不确定如何更改该消息 以下是我目前正在做的事情: using CMS.Base; using CMS.OnlineForms;

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

如果用户确实存在该电子邮件地址,则我希望显示一条错误消息。问题是,如果您试图调用
e.Cancel()
或抛出异常,BizForm只会显示一般的
“保存数据时发生错误。有关详细信息,请参阅事件日志”
消息,我不确定如何更改该消息

以下是我目前正在做的事情:

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.");
                }
            }
        }
    }
}
使用CMS.Base;
使用CMS.OnlineForms;
使用制度;
/// 
///允许您注册自定义处理程序方法和类的分部类。
///将CustomFormHandlers属性添加到分部类。
/// 
[自定义表单处理程序]
公共部分类CMSModuleLoader
{
/// 
///自定义属性类。
/// 
私有类CustomFormHandlers:CMSLoaderAttribute
{
/// 
///在应用程序启动时自动调用
/// 
公共重写void Init()
{
BizFormItemEvents.Insert.Before+=FormItem\u InsertBeforeHandler;
}
/// 
///在用户为表单创建新记录时处理表单数据
/// 
私有void FormItem_InsertBeforeHandler(对象发送方,BizFormItemEventArgs e)
{
BizFormItem formDataItem=e.项;
if(formDataItem!=null&&formDataItem.BizFormClassName==“bizform.formname”)
{ 
//如果发现重复的电子邮件,CreateUser返回false
如果(!CreateUser(formDataItem))
{
//这里需要发生一些事情
//更改bizform的错误消息
//e.取消();
抛出新异常(“具有此电子邮件地址的用户已存在。”);
}
}
}
}
}

我不确定您是否可以在BizFormItemEvent.Insert.Before事件中执行此操作。尝试为该字段实施自定义验证规则:

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

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

我也面临同样的问题。你找到解决办法了吗?