Модели анонимных типов в частичных представлениях в MVC2 - PullRequest
1 голос
/ 24 августа 2011

Я видел несколько примеров, в которых для передачи данных в представление используется анонимный тип.Кажется, мне не хватает важной информации.Рассмотрим следующий надуманный пример:

public class BlogController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Title(object args)
    {
        return View(args);
    }

}

Вызовы Index.aspx

<%= Html.Action("Title", new { Name = "Jake" }) %>

И title.ascx просто:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<h3><%= Model.Name %>'s Blog</h3>

Переход к рассматриваемому действиювызывает исключение времени выполнения:

'object' does not contain a definition for 'Name'

Я понимаю, что есть другие способы сделать это.Я мог бы сделать свое представление строго типизированным или вставить данные в объект ViewData.В этом конкретном случае я хочу иметь возможность передавать любой объект, имеющий свойство Name, и привязываться к Name.Я что-то упускаю?

1 Ответ

4 голосов
/ 24 августа 2011

Параметр args имеет тип object. Когда вы передаете значения вашего маршрута в Html.Action, вы фактически получаете аргумент string с именем Name, который, конечно, не будет привязан к параметру args.

Измените свой звонок на:

<%= Html.Action("Title", new { args = new { Name = "Jake" } }) %>
...