我正在使用详细信息视图来查看用户的对话框,并且当插入数据时出现错误,似乎不会保留视图状态。
我在数据源上使用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:仍然无法解决它,任何想法都没有?
答案 0 :(得分:3)
基本上是:
避免DetailsView_Areas.DataBind()
if (DetailsView_Areas.CurrentMode != DetailsViewMode.Insert) DetailsView_Areas.DataBind();
为DetailsView_Areas创建ItemInserted事件并放入
if (e.AffectedRows < 0) e.KeepInInsertMode = true;