2

私は2つのselectsに2つのrequiredfiledvalidatorを使用しています.1つは機能していますが、2番目のもの(必要なもの)はそうではありません:

    <asp:dropdownlist id="ddlMod" runat="server" Width="235px" AutoPostBack="True" Font-Names="Arial" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Mod" InitialValue="00" Display="Dynamic" ControlToValidate="ddlMod">
</asp:requiredfieldvalidator>

<asp:dropdownlist id="ddlInd" runat="server" Width="235px" AutoPostBack="True" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Ind" InitialValue="0" Display="Dynamic" ControlToValidate="ddlInd">
</asp:requiredfieldvalidator>

2 つ目を選択すると、1 つ目のエラー メッセージが表示されます。しかし、何も選択しないか、最初のメッセージを選択すると、メッセージが表示されません。

4

1 に答える 1

0

AutoPostBack="true"これは、ドロップダウン リストでプロパティを使用することに関する既知の asp.net の制限であると思います。プロパティはAutoPostBack検証プロセスを無効にし、ポスト バックします。

簡単な回避策として、ページ読み込みイベントを変更することで、ポストバック中に検証が発生するようにすることができます。

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack)
        Page.Validate();
}

これにより、状況の後も検証が行われますAutoPostBack。ドロップダウン リストの値が正しくない場合、ページが更新され、期待どおりに表示されるエラー メッセージが表示されます。欠点は、画面がちらつくなどです。ただし、他の唯一のオプションは、DropDownList個人的には価値がないと思う各コントロールにカスタムのクライアント側検証スクリプトを追加することです。

上記のコードでは、ページが自動的にポスト バックするとき、実際には無効である可能性がありますが、呼び出した可能性のある他のメソッドは有効なページを期待している可能性があることに注意してください。Page.IsValidこれを防ぐには、プロパティを使用します。(Page.IsValidいずれにせよ、検証済みのフォームでは、の使用が実際にはベスト プラクティスです。)

例:

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack)
        Page.Validate();

    ddlMod.SelectedIndexChanged += new EventHandler(ddlMod_SelectedIndexChanged);

    if(Page.IsValid)
    {
        //load some data; do some things...
    }
}

protected void ddlMod_SelectedIndexChanged(object sender, EventArgs e)
{
    if(Page.IsValid)
    {
        //do some stuff if the page validated
    }
}

最後の注意-Page.Validate()ページのライフサイクルの早い段階で呼び出されることを確認する必要があります (Page_Loadこれは良い点です)。まるで参照Page.IsValidValidate()ていてまだ呼び出されていないかのようPage.IsValidに、大きな厄介な例外をスローします...

自動ポストバックからちらつきを取り除きたい場合は、ajaxUpdatePanelを使用して、ユーザーに対してシームレスにすることもできます。

お役に立てれば!

于 2010-02-24T19:48:57.707 に答える