I am trying to figure out how to pass the model object from controller to view in a following scenario:
<% Html.Action(\"GetRequest\", \"The_Controller\", new
It's better to set it up where your view does not call your controller. Load all of the data for the request in the action which calls this view and populate a view model with the needed data. Once you have that, render the fields from the model.
As for your actual problem. The action that calls this view in the first place populates the ViewData.Model for its context. When you call the action method, the framework is creating a new context with its own ViewData which you dont have access to without a handle to that newly created context.
You could have the controller action return the partial view:
<%= Html.Action("GetRequest", "The_Controller", new { requestId = 12 }) %>
And in your controller action:
public ActionResult GetRequest(int requestId)
{
var request = _repository.GetRequest(requestId);
return PartialView("Request", request);
}
This way the GetRequest
action will pass the request object to the strongly typed Request.ascx
partial view and include it in the page at the place you called Html.Action
helper.
It seems that you've got all the necessary information, up front, to create a 'Request' object in your initial controller action method.
Suggest that:
drop the <% Html.Action("GetRequest", "The_Controller", new { requestId = 12 }); %>
altogether. We'll be prepopulating ViewData with all the data required to send to the Partial.
in your initial controller method, you create a new ViewData entry, perhaps ViewData["SomeRequest"]
prepopulate that as you need on the initial controller method, using requestId = 12
and email = "foo@bar"
, and all the other relevant pieces to create a 'Request' object, or whatever is needed in the Partial View named 'Request'.
i.e. ViewData["SomeRequest"]= dbRepository.GetRequestById(intrequestId);
in your View, call Html.RenderPartial("Request", ViewData["SomeRequest"]);