I’ve seen a number of examples that use an anonymous type to pass data to a view. I seem to be missing a crucial bit of information, though. Consider the following contrived example:
public class BlogController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Title(object args)
{
return View(args);
}
}
Index.aspx calls
<%= Html.Action("Title", new { Name = "Jake" }) %>
And title.ascx is simply:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<h3><%= Model.Name %>'s Blog</h3>
Navigating to the action in question causes a runtime exception:
'object' does not contain a definition for 'Name'
I realize that there are other ways to do this. I could make my view strongly-typed or push the data into the ViewData object. In this particular case, I want to be able to pass any object that has a Name property and bind to the Name. Is there something I’m missing?
The parameter
argsis of typeobject. When you are passing your route values toHtml.Action, you’re actually ending up with astringargument calledNamewhich of course won’t bind to the parameterargs.Change your call to: