Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Html.BeginForm to post to the current controller

Tags:

asp.net-mvc

I have a partial that is used in several views. The partial contains forms. The action when a form is submited is allways the same, but the controller thats contains the action depends on the view.

Lets say I have Controllers that each have an action ActOnChoosenPerson:

FireStaffController

HireStaffController

I have a partial

PersonList.ascx

The forms are rendered as

Html.BeginForm("FireStaffController" , "ActOnChoosenPerson") or

Html.BeginForm("HireStaffController" , "ActOnChoosenPerson")

What is a good way to get rid of the controller parameter? Right now I pass the name of the current controller into the model and use

Html.BeginForm(Model.CurrentController , "ActOnChoosenPerson")

but that is a bit awkward.

like image 504
Mathias F Avatar asked Jun 23 '09 09:06

Mathias F


2 Answers

This code will always give your current controller

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

Obviously you can use it without the <%= like this

Html.BeginForm(
  Url.RequestContext.RouteData.GetRequiredString("Controller")) , 
  "ActOnChoosenPerson") 

It looks more clunky but your model should not need to know what controller is calling it.

like image 193
Mark Dickinson Avatar answered Oct 05 '22 22:10

Mark Dickinson


ViewContext's RouteData property contains names of current controller and action. You could use them like this:

Html.BeginForm("ActOnChoosenPerson", ViewContext.RouteData.
    GetRequiredString("controller"))
like image 36
Alexander Prokofyev Avatar answered Oct 05 '22 22:10

Alexander Prokofyev