1

这是我的渲染

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<a href='<%= Url.Action("Edit", new {id=Model.ID}) %>'>
                    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" /></a>

我基本上想这样称呼它:

<% Html.RenderPartial("edit", new { ID = item.hlpb_ID }); %>

但是,这给了我一个运行时错误'object' does not contain a definition for 'ID'

那么如何将动态创建的无名对象(因为我猜它是什么)发送到渲染部分?像这样适用于Url.Action

4

2 回答 2

1

只有在使用强类型视图时才能直接调用对象的成员。

如果您想将动态对象传递给 RenderPartial,您几乎无法使用反射或 dynamic 关键字来访问您在运行时不知道的属性。这样做是一种非常糟糕的做法。通常,您知道哪些对象会传递给视图,因为您必须渲染它们。

有关如何使用动态关键字的更多信息,请在此处查看:

http://weblogs.asp.net/shijuvarghese/archive/2010/02/03/asp-net-mvc-view-model-object-using-c-4-dynamic-and-expandoobject.aspx

于 2010-09-21T14:10:27.130 回答
1

如果它始终是您传入的 ID,为什么不更新您的部分视图以接受Nullable<int>,例如

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>
<a href='<%= Url.Action("Edit", new {id=Model}) %>'>
    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" />
</a>

然后您Edit在控制器中的操作将类似于:

public ActionResult Edit(int? id)
{
    if (id.HasValue)
        // do something with id
    else
        // do something when no id supplied
}

如果它只是您感兴趣的 ID,则尝试传入动态对象似乎毫无意义。如果您需要从对象中使用其他信息,则应考虑使用自定义ViewData类,您可以填充该类并将其传递到视图中。

于 2010-09-21T14:12:53.150 回答