1

我见过许多使用匿名类型将数据传递给视图的示例。不过,我似乎遗漏了一些关键信息。考虑以下人为设计的示例:

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 的对象。有什么我想念的吗?

4

1 回答 1

4

参数args类型为object。当您将路由值传递给 时Html.Action,您实际上会得到一个string名为Name的参数,该参数当然不会绑定到参数args

将您的呼叫更改为:

<%= Html.Action("Title", new { args = new { Name = "Jake" } }) %>
于 2011-08-24T16:55:58.980 回答