如何在FormView中避免自动返回
本文关键字:返回 FormView | 更新日期: 2023-09-27 17:50:50
我有一个继承的ASPX页面,在Form标签中有一个FormView。
ie:<body style="margin:0px;" bgcolor="skyblue">
<form id="form1" runat="server" action="Default.aspx">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div style="background-color: #87ceeb; vertical-align: top; text-align: center;">
<asp:FormView ID="FormView1" runat="server" DefaultMode="Insert" DataSourceID="SqlDataSource1"
OnItemInserting="FormView_Inserting" OnItemInserted="FormView_Inserted" BackColor="#00C0C0" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px">
<InsertItemTemplate>
etc
etc
正如你所看到的,我正在使用Ajax,因为在表单的后面有CalendarExtender控件来处理日期。
日期文本框字段都是AutoPostBack="true"
,因为程序在服务器端不做任何事情。即:没有事件被触发。这种情况发生在所有浏览器上——IE、FF和Chrome。在这个阶段不要关心Safari等。
关键是我认为我已经陷入了"autopostback地狱",在那里有太多的控件做验证和其他控件操作将AutoPostBacks设置为"true"。
如果文本框、下拉列表等控件需要在提交表单之前执行操作,如何更好地处理这些情况?我认为这是任何表单开发项目中的常见需求。我看到某处(链接)包装FormView控件在UpdatePanel
和ContentTemplate
避免使用AutoPostBack。有人能解释一下吗?
谢谢
将我的控件设置为AutoPostBack="true"并不是一个解决方案,因为它会扰乱我的DetailsView控件的其他区域,它们也会进行回发。我再次怀疑我必须将formview包装在UpdatePanel之类的东西中,以完全避免自动回退,或者完全在JScript中进行数据操作,这是我讨厌的。但我可能没有别的选择。
这取决于您正在进行的验证类型。如果你正在做简单的验证(如必填字段或正则表达式验证),那么你可以在javascript中进行验证;不需要回邮。你甚至可以使用<asp:RequiredFieldValidator>
和<asp:RegularExpressionValidator>
。
如果您需要根据数据库验证数据,那么您需要以某种方式进行服务器调用。如果不想进行完整的页面刷新,那么需要使用AJAX。简单的方法是将需要服务器端验证的每个字段包装在<UpdatePanel>
中。例如:
<asp:UpdatePanel ID="UpdatePanel1" runat="server"
ChildrenAsTriggers="True" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" />
<asp:Label ID="Label1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
即使AutoPostBack
为真,它也只会更新<UpdatePanel>
的内容,因此它不会破坏您的其他内容。
值得注意的是,UpdatePanels仍然会在每个部分发回时发布所有表单数据。(好处是响应只更新UpdatePanel的内容,而不是整个页面。)这意味着,如果您有一个包含许多字段的大型表单,那么您可能会发送比您想要的更多的数据,因为AJAX post back会将每个字段的值发送回服务器,而实际上您只需要一个字段的值。为了避免这种情况,可以使用页面方法而不是更新面板。但是,由于您需要编写一堆javascript,因此它们需要做更多的工作。