12

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?

Heidelbergensis
  • 477
  • 2
  • 4
  • 18
kiransh
  • 349
  • 2
  • 4
  • 15

3 Answers3

17

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)
{
   ...
}
VJAI
  • 31,095
  • 22
  • 99
  • 157
4

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
Darin Dimitrov
  • 994,864
  • 265
  • 3,241
  • 2,902
1

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...

JP.
  • 5,405
  • 6
  • 55
  • 99