我有一个带有表单元素的母版页(<form runat="server">
),带有 Button 元素的内容页面(<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Sync" />
),以及包含以下内容的代码隐藏页面Button1_Click
功能。
用户来到该页面并单击按钮。代码隐藏代码(在服务器上)执行,其中更新数据库中的某些表。代码隐藏代码所做的最后一件事是设置InnerHTML
内容页面上的 Span 元素,带有成功或失败消息。
这一切都很好。问题是,如果用户刷新页面,则重新提交表单,并且浏览器会询问这是否确实是用户想要的。如果用户回答是肯定的,则重新执行隐藏代码代码并再次更新数据库。如果用户做出否定响应,则不会发生任何事情。
重新执行Code Behind代码并不是什么大问题。它不会伤害任何东西。但这并不是我真正想要的行为。
我知道我可以使用 Response.Redirect() 重定向回页面,但用户永远不会看到我的成功或失败消息。我应该提到的是,该消息实际上不仅仅是“成功”或“失败”,否则我想我可以在重定向的查询字符串中添加一些内容。
有没有办法从代码隐藏代码中重置表单元素,以便在用户刷新页面时不会重新提交表单?
母版页...
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="IntuitSync.SiteMaster" %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:ipp="">
<head runat="server">
</head>
<body>
<form runat="server">
<div runat="server" id="mainContetntDiv">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>
</form>
</body>
</html>
内容...
<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.master" CodeBehind="SyncToCloud.aspx.cs" Inherits="IntuitSync.SyncToCloud" %>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Sync" />
<span runat="server" id="SyncStatus"></span>
</asp:Content>
背后的代码...
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Web;
namespace IntuitSync
{
public partial class SyncToCloud : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//
}
protected void Button1_Click(object sender, EventArgs e)
{
/*
Do a bunch of stuff and put the results in syncResults which is a List.
*/
SyncStatus.InnerHtml = string.Join("", syncResults.ToArray()); // I'd rather do this...
//Response.Redirect(Request.Url.PathAndQuery, true); // ...and not do this.
}
}
}
非常感谢任何和所有的帮助。