<% Response.ExpiresAbsolute = "2000-01-01" Response.AddHeader "pragma", "no-cache" Response.AddHeader "cache-control", "private, no-cache, must-revalidate" '======================================================================================================================= ' MVC Dispatcher '======================================================================================================================= Class MVC_Dispatcher_Class Private m_controller_name Private m_action_name Private m_default_action_name Private m_action_params Private m_controller_instance Private m_is_partial Private Sub Class_initialize m_default_action_name = "Index" SetControllerActionNames 'SetActionParams End Sub Public Property Get ControllerName ControllerName = m_controller_name end Property Public Property Get ActionName ActionName = m_action_name end Property Public Property Get IsPartial IsPartial = m_is_partial End Property 'Public Property Get ActionParams ' if IsEmpty(m_action_params) then set m_action_params = Server.CreateObject("Scripting.Dictionary") ' set ActionParams = m_action_params 'end Property '--------------------------------------------------------------------------------------------------------------------- ' Instantiates the controller and executes the requested action on the controller. Public Sub Dispatch dim class_name : class_name = m_controller_name & "Controller" 'set the global controller reference executeglobal "dim Controller : set Controller = new " & class_name If Request.Querystring("_P").Count = 1 then ' = 1 Or Request.Querystring("_P") = "true" then m_is_partial = true Else m_is_partial = false End If If Not IsPartial then %> <% End If ExecuteAction ActionName If Not IsPartial then %> <% End If End Sub '--------------------------------------------------------------------------------------------------------------------- ' Executes the requested action on the current already-instantiated controller Private Sub ExecuteAction(action_name) ' no longer want to pass Request.Form as a parameter to actions -- allows actions to be called any way, more flexibility Execute "Controller." & action_name End Sub '--------------------------------------------------------------------------------------------------------------------- ' Ensures an action request comes in via HTTP POST only. Raises error if not. Public Sub RequirePost If Request.Form.Count = 0 Then Err.Raise 1, "MVC_Helper_Class:RequirePost", "Action only responds to POST requests." End Sub '--------------------------------------------------------------------------------------------------------------------- Public Sub RedirectTo(controller_name, action_name) RedirectToExt controller_name, action_name, empty End Sub ' Redirects the browser to the specified action on the specified controller with the specified querystring parameters. ' params is a KVArray of querystring parameters. Public Sub RedirectToExt(controller_name, action_name, params) Response.Redirect Routes.UrlTo(controller_name, action_name, params) End Sub ' Shortcut for RedirectToActionExt that does not require passing a parameters argument. Public Sub RedirectToAction(ByVal action_name) RedirectToActionExt action_name, empty End Sub ' Redirects the browser to the specified action in the current controller, passing the included parameters. ' params is a KVArray of querystring parameters. Public Sub RedirectToActionExt(ByVal action_name, ByVal params) RedirectToExt ControllerName, action_name, params End Sub ' Redirects to the specified action using a form POST. Public Sub RedirectToActionPOST(action_name) RedirectToActionExtPOST action_name, empty End Sub ' Redirects to the specified action name on the current controller using a form post Public Sub RedirectToActionExtPOST(action_name, params) put "
" put "" if Not IsEmpty(params) then dim i, key, val for i = 0 to ubound(params) step 2 KeyVal params, i, key, val put "" next end if put "
" put "" End Sub '--------------------------------------------------------------------------------------------------------------------- ' PRIVATE '--------------------------------------------------------------------------------------------------------------------- Private Sub SetControllerActionNames dim full_path : full_path = request.servervariables("path_info") dim part_path : part_path = split(full_path, Routes.ControllersUrl)(1) dim part_path_split : part_path_split = split(part_path, "/") m_controller_name = part_path_split(0) m_action_name = Choice(request("_A") <> "", request("_A"), m_default_action_name) End Sub ' This is deprecated to avoid creating a Dictionary object with every request. ' Hasn't been used in forever anyway. 'Private Sub SetActionParams ' dim key, val ' 'set m_action_params = Server.CreateObject("scripting.dictionary") ' for each key in request.querystring ' val = request.querystring(key) ' 'ignore service keys ' if instr(1, "_A", key, 1) = 0 then ' ActionParams.add key, CStr(val) ' end if ' next 'End Sub end Class dim MVC_Dispatcher_Class__Singleton Function MVC() if IsEmpty(MVC_Dispatcher_Class__Singleton) then set MVC_Dispatcher_Class__Singleton = new MVC_Dispatcher_Class end if set MVC = MVC_Dispatcher_Class__Singleton End Function %>