【问题标题】:Page.Validate() with a custom validator. err.IsValid returns true after being set to false带有自定义验证器的 Page.Validate()。 err.IsValid 设置为 false 后返回 true
【发布时间】:2012-12-25 02:18:39
【问题描述】:

我有一个控件,它应该提示用户选择会话的 customerId 或页面的旧视图状态 customerId。为此,该控件在基于

的代码中进行了验证

On postback, how can I add a error message to validation summary?

当单步执行代码时,我看到 err.IsValid 设置为 false。但是当我到达 Page.IsValid 并查看验证器时,它被设置为 true。如果能提供任何信息来帮助我理解为什么这没有按我的预期进行,我们将不胜感激。

后面的代码

public partial class CustomerChanged : System.Web.UI.UserControl
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.Page.PreLoad += Page_PreLoad;
    }

    void Page_PreLoad(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewState.Add("CustID", Globals.CurrentCust.CustId);
        }
        if (IsPostBack)
        {
            if (Convert.ToInt32(ViewState["CustID"]) != Globals.CurrentCust.CustId)
            {
                btnOldCustId.Text = "Old CustID \n" + ViewState["CustID"].ToString();
                btnNewCustId.Text = "New CustID \n" + Globals.CurrentCust.CustId.ToString();
                btnOldCustId.OnClientClick = string.Format("return changeCustomer({0},'{1}');", ViewState["CustID"].ToString(), Globals.GeneralSiteUrl);

                System.Web.UI.WebControls.CustomValidator err = new System.Web.UI.WebControls.CustomValidator();
                err.IsValid = false;
                err.ErrorMessage = "The customer has changed.";
                Page.Validators.Add(err);
            }
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {            
        if (IsPostBack)
        {
            Page.Validate();
            if (!Page.IsValid)
            {                    
                ScriptManager.RegisterStartupScript(this, this.GetType(), "CustomerChangedModalDialog", "ShowCustomerChangedModalDialog();", true);
            }
        }
    }
    protected void btnNewCustId_Click(object sender, EventArgs e)
    {
        Response.Redirect(Request.RawUrl);
    }
}

【问题讨论】:

  • 必须在同一个验证组;确保是这种情况

标签: c# asp.net validation


【解决方案1】:

您可以使用以下方法将错误消息添加到验证摘要:

if (IsPostBack)
{
    Page.Validate();
    var valid = CustomValidate();

    if(valid && Page.IsValid)
    {
    }               
}

protected bool CustomValidate()
{
     var valid = true;
     ///do your validation here

     var validator = new CustomValidator();
     validator.IsValid = false;
     valid = validator.IsValid;
     Validator.ErrorMessage = "Error....";        
     this.Page.Validators.Add(validator);
     return valid;
}

【讨论】:

  • 感谢您的快速回复,但我没有看到我所拥有的和您的建议在功能上有所不同。
  • 很抱歉我错过了相同的部分....但是将上述内容放在一个方法中,并在您执行 page.validate 后调用它。页面验证进行验证并将 isvalid 重置为 true
  • stackoverflow.com/questions/3753904/… 确认您所说的有关订单的内容。在创建验证器之前,我已经通过将 Page.Validate() 移动到该行来尝试它。 Page.IsValid 现在可以为 false。但我没有得到模态。也许我应该为此提出另一个问题。
猜你喜欢
  • 2011-06-04
  • 2016-04-24
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多