2011-11-17 11 views
5

私はこれについて既に多くの質問を見ましたが、私は困惑しています!助けてください!カスタムバリデーターは起動しますが、ポストバックを防ぎません

私はカスタムバリデーターを持っています。それは発砲ですが、ポストバックを防げていません。私の手伝ってください!投稿の前にconsole.logが登録されているのが分かります。しかし、それはとにかく後退します。ポストバックをどうやって防ぐのですか?

私は、検証するコントロールを追加しようとし、空のテキストが真であることを検証しました。また、私はポストバックを防ぐことができますどのように動作しませんでした:(

を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; 
     } 
    }); 
}); 

答えて

4

すべてが、私はあなたがなぜわからないOK althoughtに見えますあなたの送信ボタンにClick関数をつけてください。私はそれを削除して、それがおそらくデフォルトの動作を上書きしているとテストします。

また、 IsValidプロパティを大文字:私もこの問題に直面した

args.IsValid = false; 
+0

ありがとうございます... JavaScriptがコンパイルされた方がいいですね。エラーはありません。このケーシングエラーは表示されませんでした。@Kelsey – Hoppe

3

、私はそれに接続されているselectedIndexChangeイベントがあったのDropDownListカスタムバリデータを追加しようとしていました。私がドロップダウンに間違った値を与えた後、私はカスタムバリデータで私が与えたエラーメッセージを見ることができましたが、直後にポストバックが起こっていました。

ただし、このプロパティを追加すると、ドロップダウンリストコントロールにCausesValidation="true"が追加され、問題が解決しました。

このプロパティをドロップダウンに追加した後、誤った値にポストバックが発生していませんでした。

+1

あなたに役立つと答えてください。 – Shalini

1

この問題も発生しました。私が何をしたか

は私が

if (IsValid == false) 
     return; 

を追加上部に私はこれが唯一の解決策のように私には思えたポストバックを実行し、それを止めることができなかった、ボタンによって呼び出されたC#の手順でした。

0

これは、同じ奇妙な行動を起こしている人を助けるかもしれないので、これを投稿してください。

最初はこの記事のタイトルと同じ問題がありました。私はここですべての提案をチェックしたが、コードはうまくいっていたようだ。

これを修正するために、私の原因妥当性検査コントロール<asp:Button..<button..に置き換えました。なぜこれが起こっているのか分かりませんが、今はうまくいきます。

HTH

1

あなたはControlToValidate="txtWhyUnlikely"

0

<ボタンタグを検証するための正しいJavaScriptコードが欠落しているmisssingされています。 < asp:Buttonに正しいjavascriptがレンダリングされています。

私は、任意のボタンタグにこれを追加しました:

btn.Attributes("onclick") = StringFmt("if(!Page_ClientValidate(''))return false;") 

およびそのポストバックの問題を解決しました。クライアント側が問題を検出した場合、ポストバックは発生しません。

1

他の人に役立つ場合は、ボタンを追加するのを忘れた検証グループがあります。

ポストバックを防止するために、ボタン、テキストボックス、およびバリデーターを同じ検証グループに追加してください。

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 
      } 
     } 
関連する問題