0

私は正しい方向に私を向けるための賢明な魔法使いを探しています。XMLとC#を使用して模擬コミックデータベースを作成しています。私の編集ページを除いて、すべてが見事に機能します。ローカルホストではオブジェクト参照エラーが発生し、ホストではランタイムエラーが発生します。

ライブページはこちらです:(ログインユーザー名はAdministrator、パスワードはadminpassです!)
http://www.lmabee.com/test/XMLProject/Admin/comicsEdit.aspx?id=2

私のコードは次のとおりです:

comicsEdit.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Admin/adminMaster.master" AutoEventWireup="true" CodeFile="comicsEdit.aspx.cs" Inherits="_Default" %>

<asp:Content ID="Content2" ContentPlaceHolderID="center" Runat="Server">
<asp:Label ID="lblOutput" runat="server"  Visible="true" />
<asp:Panel ID="pnlEdit" runat="server" Visible="false">
    <h1>
        Edit Comic Database
    </h1>

    <div id="divMessage">
    <asp:Label ID="lblMessage" runat="server"></asp:Label></div>
    <table>
        <tr>
            <td >
                <asp:Label ID="lblTitle" runat="server" Text="Label">Title:</asp:Label>
            </td>
            <td>
                <asp:TextBox ID="txtTitle" runat="server" Width="200px"></asp:TextBox>
                <asp:RequiredFieldValidator ID="val1" runat="server" ErrorMessage="Please enter a title"
                    Display="Dynamic" ControlToValidate="txtTitle"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td >
                <asp:Label ID="lblIssue" runat="server" Text="Label">Issue:</asp:Label>
            </td>
            <td>
                <asp:TextBox ID="txtIssue" runat="server" Width="200px"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Please enter a Issue"
                    Display="Dynamic" ControlToValidate="txtIssue"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td >
                <asp:Label ID="lblDesc" runat="server" Text="Label">Description:</asp:Label>
            </td>
            <td>
                <asp:TextBox ID="txtDesc" runat="server"  Width="200px" Height="200px" TextMode="MultiLine"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="Please enter a Description"
                    Display="Dynamic" ControlToValidate="txtDesc"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td  colspan="2">
                <asp:Button ID="btnEdit" OnClick="btnEdit_Click" runat="server" Text="Update Comic">
                </asp:Button>
            </td>
        </tr>
    </table>
</asp:Panel>
</asp:Content>

そして私のコードビハインド:

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 _Default : System.Web.UI.Page
{
int intComicID;
XmlDocument myXmlDocument = new XmlDocument();
XmlNode rootNode;
XmlNode GrabComic;

public void Page_Load(object Src, EventArgs E)
{
    if (!Page.IsPostBack)
    {

        intComicID = Convert.ToInt32(Request.QueryString["id"]);

        if (intComicID == null || intComicID.ToString() == "0")
        {// doesn't include id parameter 
            lblOutput.Visible = true;
            lblOutput.Text = "no item selected.";
        }

        else
        {// id has value
            myXmlDocument.Load(Request.PhysicalApplicationPath + @"comic.xml");
            XmlNode rootNode = myXmlDocument.DocumentElement;
            GrabComic = rootNode.ChildNodes[intComicID - 1];

            if (GrabComic == null)
            {// invalid id
                lblOutput.Visible = true;
                lblOutput.Text = "item doesn't exist.";
            }
            else
            {// valid id
                pnlEdit.Visible = true;
                txtTitle.Text = GrabComic.ChildNodes[0].InnerText;
                txtIssue.Text = GrabComic.ChildNodes[1].InnerText;
                txtDesc.Text = GrabComic.ChildNodes[2].InnerText;
            }
        }
    }

}

public void btnEdit_Click(object sender, EventArgs e)
{
    GrabComic.ChildNodes[0].InnerText = txtTitle.Text;
    GrabComic.ChildNodes[1].InnerText = txtIssue.Text;
    GrabComic.ChildNodes[2].InnerText = txtDesc.Text;

    myXmlDocument.Save(Request.PhysicalApplicationPath + @"comic.xml");

    lblMessage.Text = "You have successfully updated the Database";
}
}

私はとてもうんざりしていて、文字通りこのファイルを最初から6回始めました。この悲しい樹液のために、誰かがこの問題に光を当てることをいとわないでしょうか?本当に、本当にありがたいです。私は現在、過去48年間、3時間の睡眠に取り組んでいるので、正直にあなたの足にキスをします。

一番!ローラ

4

2 に答える 2

0

電話をかけたときに問題がmyXmlDocument読み込まれない場合がありますbtnEdit_Click

string file = Path.Combine(Request.PhysicalApplicationPath, "comic.xml");
if(File.Exists(file))
{
    myXmlDocument.Load(file);
    XmlNode rootNode = myXmlDocument.DocumentElement;
    if(rootNode !=null && rootNode.ChildNodes.Count> intComicID)
    {
       GrabComic = rootNode.ChildNodes[intComicID - 1];
            if (GrabComic == null)
            {// invalid id
                lblOutput.Visible = true;
                lblOutput.Text = "item doesn't exist.";
            }
            else
            {// valid id
                pnlEdit.Visible = true;
                txtTitle.Text = GrabComic.ChildNodes[0].InnerText;
                txtIssue.Text = GrabComic.ChildNodes[1].InnerText;
                txtDesc.Text = GrabComic.ChildNodes[2].InnerText;
            }
    }

}

btnEdit_Clickメソッドで

public void btnEdit_Click(object sender, EventArgs e)
{
    if(myXmlDocument != null && GrabComic != null && GrabComic.ChildNodes.Count >3){

        GrabComic.ChildNodes[0].InnerText = txtTitle.Text; 
        GrabComic.ChildNodes[1].InnerText = txtIssue.Text;
        GrabComic.ChildNodes[2].InnerText = txtDesc.Text;
        myXmlDocument.Save(Path.Combine(Request.PhysicalApplicationPath, "comic.xml"));

        lblMessage.Text = "You have successfully updated the Database";
    }
}
于 2012-04-19T08:40:03.610 に答える
0

スタックトレースに表示されないのはなぜですか?ChildNodes[0]の1つまたはすべてがnullだと思います。または、メソッドにブレークポイントを作成し、オブジェクトがnullでないことを確認します。

于 2012-04-19T08:41:06.967 に答える