我的.NET项目处理AJAX请求。根本没有UI控件,它只是响应每个AJAX帖子的文本。
这是我目前的结构:
<%
SynchLock DBNull.Value
Main
End SynchLock
%>
<script language="VB" runat="Server">
Sub Main
Dim a() As String = Request.Form("a").Split(" "c)
' a: (0) version, (1) config, (2) userid, (3) sessionid, (4) activity
' Initializations
Using conn As DbConnection = sess.Connection
Select Case a(4)
Case 0
ActivityOne
Case 1
ActivityTwo
Case 2
ActivityThree
...
Case 28
ActivityTwentyEight
End Select
End Using
End Sub
'All the activity functions and lots of other Functions
</script>
这有效,但我认为可以改进;我不知道该怎么办。
一些活动称为子功能,我正在考虑进一步打破一些活动。为了封装活动的所有功能,我正在考虑将活动从功能更改为类,如下所示:
Select Case a(4)
Case 0
Dim a1 As New ActivityOne
a1.Execute
...
End Select
这是正确的做法吗?如果我继续上课,我会有相关的问题:
(1)我是否编写了类的“新”子或“执行”(或其他名称)Sub?如果我编码“新”子,那么我可以将上面的代码减少到:
Select Case a(4)
Case 0
New ActivityOne
...
End Select
这似乎更容易,但有缺点吗?
(2)活动全部依赖于其他Request.Form输入。我是否(a)从类中传递访问HttpContext.Current对象或(b)将Request对象传递给活动或(c)传递活动所需的特定Request.Form变量?
e.g。
(a)新的ActivityOne'该类访问HttpContext.Current.Form(“b”)等。
Class ActivityOne
Sub New
Dim p1 As String = HttpContext.Current.Form("b")
...
End Sub
End Class
(b)新的ActivityOne(请求)
Class ActivityOne
Sub New(req As HttpRequest)
Dim p1 As String = req.Form("b")
...
End Sub
End Class
(c)新的ActivityOne(Request.Form(“b”))
Class ActivityOne
Sub New(p1 As String)
...
End Sub
End Class
答案 0 :(得分:1)
所有活动都依赖于其他Request.Form输入。我是否(a)从类中传递访问HttpContext.Current对象或(b)将Request对象传递给活动或(c)传递活动所需的特定Request.Form变量?
您只需传递Request.Form NameValue集合即可。
此外,由于您使用的是ASP.NET,因此可以考虑使用支持ASP.NET AJAX的Web服务click并为每个活动创建方法。这将简化您的代码。您还可以创建WCF REST服务并使用jQuery调用它。
您无需挑选查询字符串值或创建大量的switch语句。 ASP.NET有适当的基础设施来处理这类事情。
答案 1 :(得分:1)
您不应该将ASPX页面用于AJAX请求。只需使用HTTPHandler。
http://msdn.microsoft.com/en-us/library/system.web.ihttphandler(v=VS.90).aspx