我已经看过很多关于此的问题了,但我很难过!请帮忙!
我有一个customvalidator。它正在开火,但它并没有阻止回发。请帮我这样做!我可以看到console.log在帖子之前注册。但是,无论如何它都会回复。如何阻止回发?
我尝试添加一个控件来验证,并验证空文本是否为true。我也尝试添加e.preventdefault,它不起作用:(
如何阻止回发?
<script type="text/javascript">
//<![CDATA[
function validateWhyUnlikely(source, args) {
console.log(1);
args.isValid = false;
}
//]]>
<asp:TextBox ID="txtWhyUnlikely" runat="server" Rows="4" cols="20"
CssClass="surveyTextArea" />
<asp:CustomValidator runat="server" ID="cfvWhyUnlikley" ErrorMessage="Please provide a reason since you rated an item as unlikely to provide."
CssClass="surveyError surveySmallIndent" Display="Dynamic"
ClientValidationFunction="validateWhyUnlikely" />
<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="smallSpecial" OnClick="btnSubmit_Click" />
jQuery(document).ready(function () {
jQuery('#<%= btnSubmit.ClientID %>').click(function (e) {
if (Page.IsValid == false) {
console.log(false);
e.preventDefault();
return false;
}
});
});
答案 0 :(得分:5)
一切看起来都不错我不确定为什么要将Click
功能附加到提交按钮。我会删除它并测试它,因为它可能会覆盖默认行为。
此外,我认为您需要将IsValid
属性大写:
args.IsValid = false;
答案 1 :(得分:3)
我也遇到过这个问题,我试图将自定义验证器添加到附加了selectedIndexChange
事件的下拉列表。在我为下拉列表提供了不正确的值之后,我能够查看我在自定义验证器中给出的错误消息,但在发生回发后立即发生。
但是,将此属性CausesValidation="true"
添加到下拉列表控件解决了我的问题。
将此属性添加到我的下拉列表后,回复未在错误的值上发生。
答案 2 :(得分:2)
如果它有助于其他人,我有一个验证组,我忘了添加按钮。
确保将按钮,文本框和验证器添加到同一验证组,以防止回发。
答案 3 :(得分:1)
我也遇到过这个问题。
我所做的是,在按钮调用的C#程序中,我在顶部添加了
if (IsValid == false)
return;
我无法阻止它执行回发,因此在我看来这是唯一的解决方案。
答案 4 :(得分:1)
您缺少ControlToValidate="txtWhyUnlikely"
答案 5 :(得分:0)
发布此信息可能有助于某些人获得相同的奇怪行为。
最初我和这个帖子标题有同样的问题。我检查了所有的建议,但我的代码似乎没问题。
要解决此问题,我将原因验证控件<asp:Button..
替换为<button..
。不知道为什么会这样,但很高兴它现在正在运作。
HTH
答案 6 :(得分:0)
&lt;按钮标记缺少要验证的正确javascript代码。 &lt; asp:Button确实有正确的javascript渲染。
我已将此添加到任何按钮标记中:
btn.Attributes("onclick") = StringFmt("if(!Page_ClientValidate(''))return false;")
这解决了回发后的问题。如果客户端检测到问题,则不会发生回发。
答案 7 :(得分:0)
我通过创建变量解决了这个问题:
Boolean fieldIsValid = true;
并且在自定义验证表达式中,如果参数不为真,我将更改值:
if(args.IsValid == false)
{
fieldIsValid = false;
}
else
{
fieldIsValid = true;
}
然后,我也将其放在提交点击方法中:
protected void submit_Click(object sender, EventArgs e)
{
if (fieldIsValid)
{
//submit my things
}
}