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

Asp.net mvc 使用Html.BeginForm发布到当前控制器,asp.net-mvc,Asp.net Mvc,我有一个局部视图,在多个视图中使用。 该部分包含表单。提交表单时的操作都是相同的,但包含该操作的控制器取决于视图 假设我有控制器,每个控制器都有一个ActionChoosenPerson: 消防人员控制器 HireStaffController 我有一个部分错误 PersonList.ascx 这些表单呈现为 Html.BeginForm(“FireStaffController”, “ActOnChoosenPerson”)或 Html.BeginForm(“HireStaffControll

我有一个局部视图,在多个视图中使用。 该部分包含表单。提交表单时的操作都是相同的,但包含该操作的控制器取决于视图

假设我有控制器,每个控制器都有一个ActionChoosenPerson:

消防人员控制器

HireStaffController

我有一个部分错误

PersonList.ascx

这些表单呈现为

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

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

去除控制器参数的好方法是什么?现在,我将当前控制器的名称传递到模型中并使用

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

但这有点尴尬。

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

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

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

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

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

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

不错,比我快36秒。)我更喜欢这种方法,但请注意,控制器和操作参数的顺序错误,RouteDate.Values indexer返回的对象不是字符串,因此需要强制转换。@FearofahackPlanet:谢谢!我已经交换了参数,还将Values属性更改为GetRequiredString方法。我还没有测试过这个方法,但我怀疑这个方法会支持子操作控制器,而@MarkDickinson的则不会。在某些情况下,返回的值会随url中的内容而变化。
Html.BeginForm(
  Url.RequestContext.RouteData.GetRequiredString("Controller")) , 
  "ActOnChoosenPerson")