Using Html.BeginForm to post to the current controller

asp.net-mvc

Solution

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.

Problem

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.

Original source