2009-08-07 26 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

相關問題