1

ユーザーへのダイアログに詳細ビューを使用していますが、データの挿入中にエラーが発生した場合、ビューステートが保持されないようです。

次のような例外があったかどうかを確認するために、データソースで OnInserted ハンドラーを使用しています。

protected void areaInsertHandler(Object sender, SqlDataSourceStatusEventArgs e)
    {
        if (e.Exception != null)
        {
            // There was an error in submitting, show the error dialog
            ScriptManager.RegisterClientScriptBlock(Page, GetType(), "DialogHandler", "showError('#overlayAreas');", true);
            e.ExceptionHandled = true;
        }
    }

クライアント側の JS 関数を呼び出すだけです。

function showError(overlayName) {
    $(".msgError").css('visibility', 'visible');
    $(overlayName).css('visibility', 'visible');
}

私の詳細ビューは次のようになります。

<asp:UpdatePanel ID="AreaUP" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <div id="overlayAreas" class="overlay">
        <asp:DetailsView 
            ID="DetailsView_Areas"
            runat="server"
            Visible="True"

            AutoGenerateInsertButton="False"
            AutoGenerateRows="False"

            caption="<a style='font-weight: bold;'>Bold</a> = Required field"
            CaptionAlign="Bottom"
            headertext="Create new area"   
            EnableViewState="true"

            DataKeyNames="Area_Name"
            DataSourceID="AreasSource"
            DefaultMode="Insert">
                <Fields>
                    ...
                </Fields>
        </asp:DetailsView>
    </div>

    <br />
    <asp:Button width="200" height="30"  ID="Button_CreateArea" runat="server" OnClientClick="return btnToggle('#overlayAreas')" Text="Create new area" />
    </ContentTemplate>
</asp:UpdatePanel>

すべて正常に動作しますが、何らかの理由で ASP ビューステートが保持されません。つまり、フォームに間違った情報を入力して送信すると、適切なエラーが発生し、ダイアログがまだ表示されます。しかし、フィールドには私の古い値が入力されていません。

誰かが私にいくつかの指針を与えるか、私を助けることができれば、私はそれを大いに感謝します

EDIT 10-08: まだ解決できていません。何かアイデアはありますか?

4

1 に答える 1