所以我正在为我的办公室使用一个新工具,这基本上只是一个网页,可以为办公室的地图提供一些额外的功能。我的困惑在于为什么我试图让它可编辑。
我获得使用的服务器上有ASP.NET(2.0.50727),我想我会用它。
基本上,地图的每个部分都是可编辑的(办公室,打印机,墙壁等)。当您单击一个(假设您在管理页面上)时,它会显示一个包含所有相应字段的简单HTML表单。单击“应用”,然后将其POST到.aspx页面,该页面应该更改相关的XML文档,然后将您转发回地图。
我似乎无法弄清楚,是整个ASP.NET。经过几天的搜索/实验,我什么都没有。到目前为止,我已经能够做到这一点:
<%@ Page Language="VB" %>
<!DOCTYPE html>
<html>
<body><%
dim format
format=Request.Form("Format") 'The format of the thing being edited. determines which .xml file to use
If format<>"" Then
Response.Write(format)
End If
dim objectID
objectID=Request.Form("objectID")
If objectID<>"" Then
Response.Write(objectID)
End If
XmlSource.XPath = format+"s/"+format+"[@objectID='"+objectID+"']"
XmlSource.DataFile = format+"s.xml"
%>
<form id="Form1" runat="server" >
<asp:XmlDataSource
runat="server"
ID="XmlSource"
EnableViewState="True"
EnableCaching="False" />
<asp:Repeater
runat="server"
ID="Repeater1"
DataSourceID="XmlSource" >
<ItemTemplate >
<h1><%# XPath ("@type") %> </h1>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
但是,如果我设置了XPath&amp;节点,那么它会将每个节点的“type
”吐出数据文件手动或吐出:“Object reference not set to an instance of an object
”如果我试图使其动态化(我有多种格式,如房间,墙壁,打印机等,每个都有自己的XML文件),这就是所需要的。
我只是在寻找一些指导,因为我不知道我在做什么。有什么想法吗?
编辑:在大多数情况下计算出来。这是我的新代码:<%@ Page LANGUAGE="VB" SMARTNAVIGATION="false" debug="true"%>
<%@ Import Namespace="System.Xml" %>
<script runat="server" >
Private Sub Page_Load
dim format
format=Request.Form("format")
If format<>"" Then
Response.Write(format)
End If
XmlSource.DataFile = format+"s.xml"
dim newObjectIDFromPOST
newObjectIDFromPOST=Request.Form("objectID")
If newObjectIDFromPOST<>"" Then
Response.Write(newObjectIDFromPOST)
End If
dim oldObjectIDFromPOST
oldObjectIDFromPOST=Request.Form("oldObjectID")
If oldObjectIDFromPOST<>"" Then
Response.Write(oldObjectIDFromPOST)
End If
Dim myXml As New XmlDocument
myXml = CType(XmlSource.GetXmlDocument(), XmlDocument)
Dim path As String = format+"s/"+format+"[@objectID='"+oldObjectIDFromPOST+"']"
Dim node As XmlNode = myXml.SelectSingleNode(path)
If format = "room" Then
node.Attributes("objectID").Value = newObjectIDFromPOST
End If
XmlSource.Save()
Repeater1.DataBind()
End Sub 'on page load
</script>
<!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 id="Head1" runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="Form1" runat="server" >
<asp:XmlDataSource
runat="server"
ID="XmlSource"
EnableViewState="True"
EnableCaching="False" />
<asp:Repeater
runat="server"
ID="Repeater1"
DataSourceID="XmlSource" >
<ItemTemplate >
<h1><%# XPath ("@objectID") %> </h1>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
答案 0 :(得分:0)
常规调试:页面中以下几行的输出是什么?
Response.Write(format)
Response.Write(objectID)
添加以下几行时怎么样? (我们需要找到null的对象,并导致错误。)
XmlSource.XPath = format+"s/"+format+"[@objectID='"+objectID+"']"
Response.Write("[" + XmlSource.XPath + "]")
XmlSource.DataFile = format+"s.xml"
Response.Write("[" + XmlSource.DataFile + "]")