btnClose设置为CausesValidation = false,但不起作用

本文关键字:不起作用 false 设置 CausesValidation btnClose | 更新日期: 2023-09-27 18:11:21

我有一个关闭按钮在我的形式,我已经设置为CausesValidation = false。但是,当我运行它,并试图关闭它与ErrorProvider的效果,它不会让我关闭。我甚至尝试添加到关闭例程errorProvider1.Clear()errorProvider1.Dispose() but仍然没有运气关闭的形式,直到我照顾的错误。

我发现工作是在关闭,如果我循环所有控件并设置CausesValidation=false,那么它通过关闭表单按预期工作,尽管存在任何错误。

   private void btnAdd_Click(object sender, EventArgs e)
    {
        if (!this.ValidateChildren()) return;
        DoAddCommand();
    }
    private void DoAddCommand()
    {
        //input
        string input1 = textBox1.Text;
        string input2 = textBox2.Text;
        //process
        this.ValidateChildren();
        decimal sum = Class1.Add(input1, input2);
        //output
        lblSum.Text = sum.ToString();
    }
    private void textBoxNumberEntry_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        TextBox textBox = sender as TextBox;
        decimal number1 = 0;
        try
        {
            number1 = decimal.Parse(textBox.Text);
            errorProvider1.Clear();
        }
        catch (FormatException)
        {
            errorProvider1.SetError(textBox, "Enter a valid number");
            e.Cancel = true;
        }
    }
    private void btnClose_Click(object sender, EventArgs e)
    {
        foreach (Control item in this.Controls)
        {
            item.CausesValidation = false;
        }
        this.Close();
    }

btnClose设置为CausesValidation = false,但不起作用

尝试在您的asp:Button标签中添加这两个属性

CausesValidation="false"
UseSubmitBehavior="false"

CauseValidation应该是足够的,但我相信,因为你有一个服务器端OnCLick事件,你还需要指定SubmitBehavior。

马里奥

最有可能发生的事情是,当您尝试点击取消按钮时,其中一个textbox具有焦点,因此验证已经发生。您的解决方案可以通过遍历控件并将CausesValidation属性设置回False来工作。

一个简单的方法是关闭表单的AutoValidate属性:

private void btnClose_Click(object sender, EventArgs e)
{
  this.AutoValidate = AutoValidate.Disable;
  this.Close();
}

一个类似的问题导致我在这里:在我的情况下,按钮的父控件(在我的情况下,面板)有CausesValidation设置为true;将其设置为false允许在不验证的情况下触发按钮的单击。

根据我的经验,处理这个问题最有效的方法是将控件上的ValidationGroup设置为一个不存在的验证组名称。

**这是hacky,所以YMMV **

<asp:LinkButton ID="DoSomethingButton" runat="server"
    ValidationGroup="NonExistent" 
    OnClientClick="return confirm('Are you sure you want to do something?');" 
    Text="Do something" 
    OnClick="DoSomething_Click">
</asp:LinkButton>

如果有人对此感到愤怒,我刚才也遇到了同样的问题。只需将按钮设置为:data-validate-target="none"

data-validate-target是您在aspx验证控件(如required等)上寻找的标签,一旦框失去焦点,就会在客户端触发。

现在为我工作。

唯一一个至少在edge、chrome和Opera上完美工作的选择是只使用参数formNoValidate="false"

我正在使用VS 2022社区版,但它没有为我提供这样的选项,但是寻找解决方案并使用EDGE的DEVTools,我在智能感知的帮助下找到了选项formNoValidate。

然后我回到VS,并在这个按钮中添加了选项:

& lt; asp:按钮ID ="bHistory"runat ="server"Text="Get Your last data"OnClick ="bHistory_Click"formNoValidate ="false"/在