2009-08-07 211 views
1

现在,我有一个动作只从我的MVC应用程序中的索引页POST。但我想要一个处理所有页面帖子和POST Handler操作的通用处理程序操作,我想知道我刚刚来自的视图。我想要的是:任何想法?控制器和以前的视图

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult GenericPostHandler(NewAccountInfo info) 
    { 
     try 
     { 
      string currentview = //how to get View for which to handle the POST? 
      Persist(); 

      return RedirectToAction(StepManager.GetNextStep(currentView)); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

回答

0
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GenericPostHandler(NewAccountInfo info, string fromViewName) 
{ 
    ... 
} 

在浏览:

<% var actionUrl = Url.RouteUrl(new { 
    controller = "yourcontroller", 
    action = "genericposthandler", 
    fromviewname = "whereyoucamefrom" 
}); %> 

<form action="<%= actionUrl %>" method="post"> 
    ... 
</form> 

产生的URL像/yourcontroller/genericposthandler?fromviewname=whereyoucamefrom

1

我想你可以写的路线,将所有请求转发到一个特定的控制器单一的行动,但那么这将是对所有HTTP命令活跃,GET或POST或以其他方式。

你试图实现的是非常反对MVC的精神。你能否告诉我们这个要求背后的想法是什么?

我会尽量猜测。你希望对每篇文章进行一些预处理,对吗?也许是一个授权检查,活动日志等。如果是这样,你可以实现你自己的ActionFilter并用这个属性装饰你的所有控制器。然后所有的调用都会被这个过滤器拦截,你可以在那里做任何你需要的 - 然后把请求传递给它的正常处理程序(action)或者将它路由到别处。

+1

我建立一个工作流程。基本上,通过知道你来自哪个视角,我可以告诉你有什么看法。这是如何违背MVC的精神?我仍然使用控制器来执行动作路由,我只是试图减少重复代码并使其更通用。谢谢。 – Crios 2009-08-07 17:04:01

相关问题