Asp.net mvc 使用Html.BeginForm发布到当前控制器
我有一个局部视图,在多个视图中使用。 该部分包含表单。提交表单时的操作都是相同的,但包含该操作的控制器取决于视图 假设我有控制器,每个控制器都有一个ActionChoosenPerson: 消防人员控制器 HireStaffController 我有一个部分错误 PersonList.ascx 这些表单呈现为 Html.BeginForm(“FireStaffController”, “ActOnChoosenPerson”)或 Html.BeginForm(“HireStaffController”, “ActonchosenPerson”) 去除控制器参数的好方法是什么?现在,我将当前控制器的名称传递到模型中并使用 Html.BeginForm(Model.CurrentController, “ActonchosenPerson”) 但这有点尴尬。ViewContext的属性包含当前控制器和操作的名称。您可以这样使用它们:Asp.net mvc 使用Html.BeginForm发布到当前控制器,asp.net-mvc,Asp.net Mvc,我有一个局部视图,在多个视图中使用。 该部分包含表单。提交表单时的操作都是相同的,但包含该操作的控制器取决于视图 假设我有控制器,每个控制器都有一个ActionChoosenPerson: 消防人员控制器 HireStaffController 我有一个部分错误 PersonList.ascx 这些表单呈现为 Html.BeginForm(“FireStaffController”, “ActOnChoosenPerson”)或 Html.BeginForm(“HireStaffControll
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")