适当的AJAX处理程序结构

时间:2011-06-01 23:27:42

标签: .net asp.net vb.net

我的.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

2 个答案:

答案 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