1

複数行のテキスト ボックスが 1 つ、ボタンが 1 つ、バリデータが 2 つあるフォームがあります。次のマークアップがあります。

    <asp:RequiredFieldValidator ID="vldQuestionTextRequired" runat="server" ControlToValidate="tbmQuestionText"
        Display="Dynamic"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="vldNotHintText" runat="server" ControlToValidate="tbmQuestionText"
        Display="Dynamic" EnableClientScript="true" OnServerValidate="HintText_ServerValidate"
        ClientValidationFunction="HintText_ClientValidate"></asp:CustomValidator>
        <span class="eq_ad_question_field_bg">&nbsp;&nbsp;&nbsp;&nbsp;</span>
        <asp:TextBox ID="tbmQuestionText" runat="server" CssClass="eq_ad_question_field"
            TextMode="MultiLine"></asp:TextBox>

クライアント側の検証 JS は次のようになります。

function HintText_ClientValidate(sender, e)
{
    if(e.Value != null)
        e.IsValid = e.Value != '<%= InstructionalText %>';
    else
        e.IsValid = false;
}

元のヒント テキストを変更せずにボタンをクリックすると、正しいバリデータ エラー メッセージが表示され、フォーカスがテキスト ボックスに戻ります。次に、テキストボックスに何かを書き込んでボタンをクリックすると、バリデーターが再評価されて消えますが、ポストバックは発生しません。ボタンをもう一度クリックすると、ポストバックが返されます。

以前にこの動作を見た人はいますか? ありがとうございました!

編集:バリデーターを動的ではなく静的にすると、ボタンが機能することがわかりました。これを回避する方法はありますか?

4

1 に答える 1

1

さて、このテキストボックスには、弾力性を持たせるためのJavaScriptが含まれていました。この JavaScript は、使用されていないスペースを削除するために onblur イベントで発生し、テキスト ボックスが変更されたため、ポストバックが停止しました。テキストボックスの最小化は最初から必須ではなかったので、それを削除したところ、ポストバックはうまく機能しました。

于 2012-12-16T16:18:10.647 に答える