【发布时间】:2013-12-24 16:48:25
【问题描述】:
所以我正在开发一种新工具供我的办公室使用,它基本上只是一个网页,它呈现办公室地图并具有一些额外的功能。我的困惑在于为什么我试图让它可编辑。
我使用的服务器上有 ASP.NET(2.0.50727),我想我会使用它。
基本上,地图的每个部分都是可编辑的(办公室、打印机、墙壁等)。当您单击一个时(假设您在管理页面上),它会显示一个简单的 HTML 表单,其中包含所有适当的字段。单击“应用”,它会将其发布到 .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 和数据文件,它要么吐出 每个 节点的“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>
【问题讨论】:
-
为澄清起见,您可以直观地看到您的办公室。单击此表示中的项目会弹出一个表单,允许您编辑所选对象的信息。更新的信息是否保存到 XML 文件(每个项目)?
-
差不多。它是每个项目的type。所以所有“房间”对象都包含在“rooms.xml”中。保存部分还没有工作,因为我不知道我在做什么。
-
如果我这样做,我会使用 HTML 和 CSS 来布置房间和对象,然后将 JavaScript 点击事件添加到将显示模式表单的对象。在保存表单时,我会使用 Ajax 将表单数据发送到服务器上的 Web 服务。然后,服务器将更改 rooms.xml 文件并将成功/失败返回给调用 Ajax 函数。
-
好的,那该怎么做呢?
-
您必须使用 .net 2 还是可以使用 4.x 和 mvc?