ユーザーへのダイアログに詳細ビューを使用していますが、データの挿入中にエラーが発生した場合、ビューステートが保持されないようです。
次のような例外があったかどうかを確認するために、データソースで 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: まだ解決できていません。何かアイデアはありますか?