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

如果有人可以给我一些指示或帮助我,我将不胜感激

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

4

1 回答 1

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;
    

请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsviewinsertedeventargs.affectedrows(v=vs.110).aspx

于 2014-03-19T14:31:10.837 回答