C# 在EWL中,如何在页面的任意位置显示自定义验证内容?

C# 在EWL中,如何在页面的任意位置显示自定义验证内容?,c#,validation,web-applications,enterprise-web-library,C#,Validation,Web Applications,Enterprise Web Library,我有一个收集电子邮件地址的页面,提交表单后,我会查看该电子邮件是否存在。如果是这样,用户就不能创建实体。我不想显示一个正常的验证错误状态消息,而是想显示一个很好的段落,用几个链接来解释这种情况 我尝试过创建段落并使用.visible=false或display:none隐藏它,然后在传递给AddTopValidationMethod的方法中使其可见。这是行不通的 我知道我可以有HTML状态消息,但1)我认为这没有那么好,2)我无法使用EwfLink构建链接-我必须手工编写锚定标记 这里最好的解决

我有一个收集电子邮件地址的页面,提交表单后,我会查看该电子邮件是否存在。如果是这样,用户就不能创建实体。我不想显示一个正常的验证错误状态消息,而是想显示一个很好的段落,用几个链接来解释这种情况

我尝试过创建段落并使用.visible=false或display:none隐藏它,然后在传递给AddTopValidationMethod的方法中使其可见。这是行不通的

我知道我可以有HTML状态消息,但1)我认为这没有那么好,2)我无法使用EwfLink构建链接-我必须手工编写锚定标记

这里最好的解决方案是什么?

试试这个:

// Add the form item to the page.
var validationFailed = false;
myPanel.AddControlsReturnThis( myMod.GetEmailAddressTextFormItem( false, validationErrorNotifier: () => validationFailed = true, validationList: myPostBack ).ToControl() );

// Add the email-address-exists error placeholder to the page.
myPanel.AddControlsReturnThis(
  new ModificationErrorPlaceholder(
    new Validation(
      ( pbv, validator ) => {
        if( validationFailed )
          return;
        if( emailAddressExists( myMod.EmailAddress ) )
          validator.NoteErrorAndAddMessage( "The user will never see this." );
      },
      myPostBack ),
    errors => {
      if( !errors.Any() )
        return Enumerable.Empty<Control>();

      // Use any controls you want here!
      var link = EwfLink.Create( MyDestinationPage.GetInfo(), new TextActionControlStyle( "has a link" ) );
      return new Paragraph( new Control[] { "This sentence ".GetLiteralControl(), link, " in it.".GetLiteralControl() } ).ToSingleElementArray();
    } ) );
//将表单项添加到页面中。
var validationFailed=false;
myPanel.AddControlsReturnThis(myMod.GetEmailAddressTextFormItem(false,validationErrorNotifier:()=>validationFailed=true,validationList:myPostBack.ToControl());
//将电子邮件地址存在错误占位符添加到页面。
myPanel.AddControls返回此(
新的改进型箭头定位器(
新验证(
(pbv,验证器)=>{
如果(验证失败)
返回;
如果(emailAddressExists(myMod.EmailAddress))
validator.NoteErrorAndAddMessage(“用户将永远看不到它”);
},
我的回信),
错误=>{
如果(!errors.Any())
返回可枚举的.Empty();
//在这里使用任何你想要的控件!
var link=EwfLink.Create(MyDestinationPage.GetInfo(),新的TextActionControlStyle(“有链接”);
返回新段落(新控件[]{“This-station”.GetLiteralControl(),link,“in-it.”.GetLiteralControl()}).ToSingleElementArray();
} ) );

如果您希望您的解释性段落位于电子邮件地址表单项上方,请将其验证添加到
BasicValidationList
,您可以在创建表单项后将其添加到回发对象中。

我想您应该使用NoteError()而不是NoteErrorAndAddMessage(“用户永远看不到它)。@GregSmalter,我认为那行不通。请注意,
controlGetter
函数(ModificationErrorPlaceholder的第二个参数)中的逻辑基于错误消息集合,而不是基于
验证器。