У меня есть главная страница с элементом Form (<form runat="server">), страница содержимого с элементом Button (<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Sync" />) и страница кода программной части, содержащая функцию Button1_Click.
Пользователь заходит на страницу и нажимает кнопку. Код Code Behind выполняется (на сервере), в котором он обновляет некоторые таблицы в базе данных. Последнее, что делает код программной части, — это устанавливает InnerHTML элемента Span на странице содержимого с сообщением об успехе или неудаче.
Это все прекрасно работает. Проблема в том, что если пользователь обновляет страницу, форма отправляется повторно, и браузер спрашивает, действительно ли это то, чего хочет пользователь. Если пользователь отвечает утвердительно, код программной части выполняется повторно, и база данных снова обновляется. Если пользователь отвечает отрицательно, то ничего не происходит.
Повторное выполнение кода Code Behind не представляет большой проблемы. Ничего не повредит. Но это не совсем то поведение, которое мне нужно.
Я знаю, что могу сделать перенаправление обратно на страницу с помощью Response.Redirect(), но тогда пользователь никогда не увидит мое сообщение об успехе или неудаче. Я должен упомянуть, что сообщение действительно больше, чем просто «Успех» или «Ошибка», иначе я полагаю, что мог бы добавить что-то в QueryString при перенаправлении.
Есть ли способ сбросить элемент формы из кода программной части, чтобы, если пользователь обновляет страницу, форма не отправлялась повторно?
Главная страница...
<%@ 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.
}
}
}
Любая помощь приветствуется.