ASP.NET MVC - POST Action Method with Additional Parameters from URL

Karl picture Karl · Mar 17, 2010 · Viewed 31.6k times · Source

With ASP.net MVC is it possible to POST a form to a controller action which includes parameters not in the form, but from the URL?

For example

The Action method in GroupController:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(int idOne, int idTwo, Model model)
    { ... }

The route:

"{controller}/{action}/{idOne}/{idTwo}"

Posted URL:

/Employee/Show/1/42

In this example, the form is being posted to a different controller, the model has the correct value, however the other parameters have default values 0.

The behavior I was expecting is that the ModelBinder would see that I have two parameters that match the given route, and assign the current values of 1 and 42 to the parameters in the same same way a GET operation works.

Is this behavior not supported, or am I missing something?

EDIT: To be clear, the form on the Show view for the controller Employee contains a form which is posting to a different controller. We can call it Group.

The form action URL looks like this

/Groups/Create/0/0

The form is declared as follows

Html.BeginForm("Create", "Groups")

After trying many different overloads for Html.BeginForm I have found that the parameters are only mapped when the form action URL matches the current URL in the browser address bar.

So if i navigate to the URL /Groups/Create/1/42 I will have a new form. If I then submit the form, the URL route values are passed to the POST action.

Answer

Jørn Schou-Rode picture Jørn Schou-Rode · Mar 17, 2010

If I understand your question correctly, you want the action of the rendered <form> element pointing to URL containing route values. This should be possible with one of the overloads of the HtmlHelper.BeginForm() extension method:

Html.BeginForm("action","controller", new { idOne=1, idTwo=2 }, FormMethod.Post);

Let me know if I got your question all wrong :)