13

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
  • 475
  • 2
  • 5
  • 18
kiransh
  • 369
  • 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
  • 32,167
  • 23
  • 102
  • 164
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
  • 1,023,142
  • 271
  • 3,287
  • 2,928
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,536
  • 7
  • 58
  • 100