Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理异常时未保留Viewstate_C#_Asp.net_.net_Web_Viewstate - Fatal编程技术网

C# 处理异常时未保留Viewstate

C# 处理异常时未保留Viewstate,c#,asp.net,.net,web,viewstate,C#,Asp.net,.net,Web,Viewstate,我正在使用detailsview为用户创建一个对话框,当插入数据时,viewstate似乎没有被保留 我在数据源上使用OnInserted处理程序检查是否存在如下异常: protected void areaInsertHandler(Object sender, SqlDataSourceStatusEventArgs e) { if (e.Exception != null) { // There was an error in

我正在使用detailsview为用户创建一个对话框,当插入数据时,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');
}
我的Details视图如下所示:

<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 viewstate没有被保留。这意味着,如果我在表单中填写了不正确的信息并提交,我将得到相应的错误,对话框仍将显示。但是字段中没有填写我的旧值

如果有人能给我一些建议或帮助我,我将不胜感激

编辑10-08:仍然无法解决,有什么想法吗?

基本上:

  • 避免细节视图区域。数据绑定()

  • 为您的DetailsView\u区域创建ItemInserted事件并放置

        if (e.AffectedRows < 0) e.KeepInInsertMode = true;
    
    if(e.AffectedRows<0)e.KeepInInsertMode=true;
    

  • 请参见

    是否您正在使用ASP.NET framework的早期版本,如果在页面、用户控件和母版页声明中设置了enableviewstate,则无法在页面上的控件中覆盖该版本?@Torandsson,不要这样认为,我的目标是.NET framework 4
        if (e.AffectedRows < 0) e.KeepInInsertMode = true;