kiransh
kiransh

Reputation: 369

Is there any way to pass a whole model via html.actionlink in ASP.NET MVC 3?

How do I pass a whole model via html.actionlink or using any other method except form submission? Is there any way or tips for it?

Upvotes: 13

Views: 20273

Answers (3)

VJAI
VJAI

Reputation: 32768

Though it's not advisable in complex cases, you can still do that!

public class QueryViewModel
{
  public string Search { get; set; }
  public string Category { get; set; }
  public int Page { get; set; }
}

// just for testing
@{
   var queryViewModel = new QueryViewModel
   {
      Search = "routing",
      Category = "mvc",
      Page = 23
   };
}

@Html.ActionLink("Looking for something", "SearchAction", "SearchController"
                  queryViewModel, null);

This will generate an action link with href like this,

/SearchController/SearchAction?Search=routing&Category=mvc&Page=23

Here will be your action,

public ViewResult SearchAction(QueryViewModel query)
{
   ...
}

Upvotes: 17

JP.
JP.

Reputation: 5606

You could use javascript to detect a click on the link, serialize the form (or whatever data you want to pass) and append it to your request parameters. This should achieve what you're looking to achieve...

Upvotes: 1

Darin Dimitrov
Darin Dimitrov

Reputation: 1038850

No, you cannot pass entire complex objects with links or forms. You have a couple of possible approaches that you could take:

  • Include each individual property of the object as query string parameters (or input fields if you are using a form) so that the default model binder is able to reconstruct the object back in the controller action
  • Pass only an id as query string parameter (or input field if you are using a form) and have the controller action use this id to retrieve the actual object from some data store
  • Use session

Upvotes: 4

Related Questions