处理异常时未保留Viewstate

时间:2012-10-04 09:59:23

标签: c# asp.net .net web viewstate

我正在使用详细信息视图来查看用户的对话框,并且当插入数据时出现错误,似乎不会保留视图状态。

我在数据源上使用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视图状态不会被保留。这意味着如果我在表单中填写不正确的信息并提交,我将收到相应的错误,仍然会显示对话框。但这些字段并没有用我的旧价值填写。

如果有人能给我指点或帮助我,我会非常感激

编辑10-08:仍然无法解决它,任何想法都没有?

1 个答案:

答案 0 :(得分:3)

基本上是:

  1. 避免DetailsView_Areas.DataBind()

        if (DetailsView_Areas.CurrentMode != DetailsViewMode.Insert) DetailsView_Areas.DataBind(); 
    
  2. 为DetailsView_Areas创建ItemInserted事件并放入

        if (e.AffectedRows < 0) e.KeepInInsertMode = true;
    
  3. 请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsviewinsertedeventargs.affectedrows(v=vs.110).aspx