首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承自asp:validationsummary

继承自asp:validationsummary
EN

Stack Overflow用户
提问于 2009-03-24 08:05:15
回答 3查看 1.1K关注 0票数 2

我需要在页面(或控件)的顶部显示一个格式良好的错误消息。

因此,我实现了新创建的服务器控件的render方法。新创建的控件继承自ValidationSummary。

代码语言:javascript
复制
public class AgValidationSummary : ValidationSummary
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        if(this.Enabled)
        {
            if (Page.IsPostBack && !Page.IsValid)
            {

我现在的问题是,如果触发了一个按钮,并且它的属性CausesValidation被设置为false,那么我的validationsummary将抛出一个异常,因为我询问了Page.IsValid属性(并且只有在调用了Page.validate()时才会设置该属性。

有人有解决这个问题的办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-12 05:24:04

解决方案在某种程度上很简单:

不要解析Page.IsValid标志:),而是在您的void Render(HtmlTextWriter writer)中执行类似的操作

代码语言:javascript
复制
if (!this.Enabled)
{
    return;
}

if (this.Page != null)
{
    this.Page.VerifyRenderingInServerForm(this);
}
else
{
    return;
}

var failedValidators = this.Page.Validators.OfType<BaseValidator>().Where(bv => string.Equals(bv.ValidationGroup, this.ValidationGroup) && !bv.IsValid).ToList();

if (failedValidators.Any())
{
    writer.Write(this.HeaderText);
    foreach (var failedValidator in failedValidators)
    {
        writer.Write(failedValidator.ErrorMessage);
    }
}

这样做的原因是:

导致回发的控件已获得有关

  1. CausesValidation
  2. ValidationGroup
  3. and other stuff

因此,ASP.net引擎本身将执行相关的验证器,并将它们设置为IsValid或不设置它们。

编辑

要删除原始HeaderText (仍在渲染),请执行以下操作:

代码语言:javascript
复制
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
    // overwrite to hide the original HeaderText
}
票数 3
EN

Stack Overflow用户

发布于 2009-03-24 08:19:40

也许您可以在ViewState中保存IsValid属性,并将其初始化为true。

在Load中,检查IsValid是否为null,如果不为null,则将ViewState中的IsValid设置为Page.IsValid中的值。

在Render中,从ViewState读取IsValid。

票数 0
EN

Stack Overflow用户

发布于 2009-03-24 11:50:06

我可能在这里偏离了正轨,但是您就不能在控件的构造函数中连接到页面的Validate事件吗?

如果需要,您可以有一个内部标志,渲染检查以查看是否在渲染代码中执行下一步发生的操作。

代码语言:javascript
复制
private bool _thePageIsBeingValidated = false;

public bool ShouldIDoMyThing
{
     get{ return (_thePageIsBeingValidated && this.Enabled && this.Page.IsPostback && this.Page.IsValid != null && this.Page.IsValid == false); }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/676489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档