2

ここで本当に奇妙なことが起こっています。

マスター ページに次の RadComboBox とボタンがあります。

 <telerik:RadComboBox ID="rcbPesquisa" runat="server" CausesValidation="false"  ShowToggleImage="false" LoadingMessage="Carregando..." HighlightTemplatedItems="true" OnClientKeyPressing="onKeyPressing" EmptyMessage="Buscar" EnableLoadOnDemand="True" EnableVirtualScrolling="true" OnItemsRequested="rcbPesquisa_ItemsRequested" AllowCustomText="True" AutoPostBack="true" OnSelectedIndexChanged="rcbPesquisa_SelectedIndexChanged" Width="350">
 <asp:Button runat="server" ID="btnExcluir" Text="Excluir" OnClick="btnExcluir_Click" CausesValidation="true" ValidationGroup="Excluir" CssClass="btn" OnClientClick="return confirm('Deseja realmente excluir o registro?');" />

このページには、次のバリデータがあります。

<asp:CustomValidator ID="cuvExclusaoRelacionamento" runat="server" ValidationGroup="Excluir"  OnServerValidate="cuvExclusaoRelacionamento_ServerValidate"></asp:CustomValidator>

何が起こるか: コンボボックスをクリックしてアイテムをロードしようとすると、サーバーで cuvExclusaoRelacionamento バリデーターが呼び出され、もちろん事態は悪化します。ところで... cuvExclusaoRelacionamento_ServerValidate の __EventTarget は空です

4

1 に答える 1

1

残念ながら、完全なコードを確認せずに推測しているだけですが、次の設定により、これを回避する方法はないと思います。

  1. ValidationGroup="Excluir"入力コントロールに割り当てられた ValidationGroup プロパティは、コントロールがポストバックしたときにトリガーされる検証グループです。バリデータ コントロールの ValidationGroup プロパティは、それが割り当てられているグループの名前です。最後に、サブミット コントロール (ボタンの場合もありますが、入力コントロールの場合もあります) の ValidationGroup プロパティは、サーバーにポスト バックする前にページを検証する Validators のグループの名前です。この時点で、検証が失敗した場合はポストバックされない (サーバー側のイベント ハンドラーがトリガーされない) ことを指摘しておく必要があります。コントロールの検証グループがカスタム バリデーターの検証グループと同じであるとすると、コントロールがサーバーにポスト バックしようとすると (たとえば、クリックされたとき)、バリデーターがトリガーされます。

  2. AutoPostBack="true"コントロールを自動ポストバックに設定すると、更新時にサーバーにポストバックされます。OnClick イベントがある場合、コントロールの状態が変更されたときにサーバー側のアクションを実行する必要があると思います。

  3. CausesValidation="true"true に設定すると、サブミットしたコントロールと同じ「検証グループ」に割り当てられたすべてのバリデーターが、コントロールがサーバーにポスト バックしようとしたときにトリガーされます。上で述べたように、検証が失敗した場合、これによりポストバックが防止されます (サーバー側のイベント ハンドラーがトリガーされないことを意味します)。

提供された情報を考えると、実行できる最善のアクションはCausesValidation="false"、コントロールを設定することだと思います。「Excluir」検証グループに割り当てられた送信ボタン (またはポスト バックをトリガーするその他のコントロール) が別の場所にある限り、検証は引き続き実行できます。

于 2013-08-22T10:50:39.893 に答える