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();
}
尝试在您的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"/在