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.
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.
ViewContext's RouteData property contains names of current controller and action. You could use them like this:
Html.BeginForm("ActOnChoosenPerson", ViewContext.RouteData.
GetRequiredString("controller"))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With