0

xmlを使用して更新可能なニュースを処理していますが、挿入/更新ページである最初のページを更新するたびに、テキストボックスを空にしても投稿されます。

最初のHTML/ASPXファイルのコード:

(

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

public partial class Main : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        XmlDocument xmlfile = new XmlDocument();
        xmlfile.Load(Server.MapPath("~/TestXML.xml"));
        //create element
        XmlElement theNewsTag = xmlfile.CreateElement("news");
        XmlElement theTitleTag = xmlfile.CreateElement("title");
        XmlElement theContentsTag = xmlfile.CreateElement("contents");
        //create text node
        XmlText theTitleText = xmlfile.CreateTextNode(xmlTitle.Text);
        XmlText theContentsText = xmlfile.CreateTextNode(xmlContent.Text);
        //append
        theTitleTag.AppendChild(theTitleText);
        theContentsTag.AppendChild(theContentsText);

        theNewsTag.AppendChild(theTitleTag);
        theNewsTag.AppendChild(theContentsTag);
        //save
        xmlfile.DocumentElement.AppendChild(theNewsTag);
        xmlfile.Save(Server.MapPath("~/TestXML.xml"));

        xmlTitle.Text = "";
        xmlContent.Text = "";

        Response.Redirect(Server.MapPath("~/Main.aspx"));
    }
}

私の最初のHTML/ASPXファイル(挿入/更新用)

<h2>Title</h2>
    <asp:TextBox ID="xmlTitle" runat="server"/>
<h2>Content</h2>
    <asp:TextBox ID="xmlContent" runat="server"/>
<h2>Insert XML</h2>
    <asp:Button ID="Button1" runat="server" Text="Post News" 
onclick="Button1_Click" />

私の2番目のHTML/ASPXファイル(XMLファイルを表示するため)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xmlpath.aspx.cs" Inherits="xmlpath" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListView ID="ListView1" runat="server" DataSourceID="newDS">
            <LayoutTemplate>
                <div id="ItemPlaceHolderContainer"></div>
                <span id="ItemPlaceHolder" runat="server"></span>
            </LayoutTemplate>

            <ItemTemplate>
                <h2><%#XPath("title") %></h2>
                <p><%#XPath("contents") %></p>
            </ItemTemplate>
        </asp:ListView>
        <asp:XmlDataSource ID="newDS" runat="server" DataFile="~/TestXML.xml">
        </asp:XmlDataSource>
    </div>
    </form>
</body>
</html>
4

1 に答える 1

1

ページを更新すると、データが再投稿されます。ダイアログボックスも表示さ Confirm Form Resubmissionれるので、実際にはボタンをもう一度押しています。

ページの読み込みでこれを作成します

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["Key"] = "1";
    }

}

ボタンをクリックする前にセッションを確認してください

protected void button_Click(object sender, EventArgs e)
 {
    if (Session["Key"].ToString() == "1")
    {
           XmlDocument xmlfile = new XmlDocument();
    xmlfile.Load(Server.MapPath("~/TestXML.xml"));
    //create element
    XmlElement theNewsTag = xmlfile.CreateElement("news");
    XmlElement theTitleTag = xmlfile.CreateElement("title");
    XmlElement theContentsTag = xmlfile.CreateElement("contents");
    //create text node
    XmlText theTitleText = xmlfile.CreateTextNode(xmlTitle.Text);
    XmlText theContentsText = xmlfile.CreateTextNode(xmlContent.Text);
    //append
    theTitleTag.AppendChild(theTitleText);
    theContentsTag.AppendChild(theContentsText);

    theNewsTag.AppendChild(theTitleTag);
    theNewsTag.AppendChild(theContentsTag);
    //save
    xmlfile.DocumentElement.AppendChild(theNewsTag);
    xmlfile.Save(Server.MapPath("~/TestXML.xml"));

    xmlTitle.Text = "";
    xmlContent.Text = "";

    Response.Redirect(Server.MapPath("~/Main.aspx"));
    Session["Key"] = "0"; // set key = 0 
    }
 }
于 2012-08-10T19:21:17.007 に答える