使用Html.BeginForm发布到当前控制器

时间:2009-06-23 09:08:08

标签: asp.net-mvc

我有一个部分用于多个视图。 部分包含表格。表单被提交时的操作总是相同,但包含操作的控制器取决于视图。

假设我有控制器,每个控制器都有一个动作ActOnChoosenPerson:

  

FireStaffController

     

HireStaffController

我有部分

  

PersonList.ascx

表单呈现为

  

Html.BeginForm(“FireStaffController”,   “ActOnChoosenPerson”)或

     

Html.BeginForm(“HireStaffController”,   “ActOnChoosenPerson”)

摆脱控制器参数的好方法是什么?现在我将当前控制器的名称传递给模型并使用

  

Html.BeginForm(Model.CurrentController,   “ActOnChoosenPerson”)

但这有点尴尬。

3 个答案:

答案 0 :(得分:8)

此代码将始终提供您当前的控制器

<%=( Url.RequestContext.RouteData.GetRequiredString("Controller")) %>

显然你可以在没有&lt;%=喜欢这个

的情况下使用它
Html.BeginForm(
  Url.RequestContext.RouteData.GetRequiredString("Controller")) , 
  "ActOnChoosenPerson") 

它看起来更笨重,但你的模型不需要知道控制器在调用它。

答案 1 :(得分:6)

ViewContext的RouteData属性包含当前控制器和操作的名称。您可以像这样使用它们:

Html.BeginForm("ActOnChoosenPerson", ViewContext.RouteData.
    GetRequiredString("controller"))

答案 2 :(得分:0)

最简单的方法是简单地调用没有参数的BeginForm()。