Is there any way to pass a whole model via html.ac

2019-01-22 21:51发布

问题:

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?

回答1:

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)
{
   ...
}


回答2:

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


回答3:

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