这是我的renderparial
<%@ 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'
那么如何将一个动态创建的无名对象(因为我猜那是什么)发送到一个renderpartial?这适用于Url.Action
答案 0 :(得分:1)
使用强类型视图时,您只能直接调用对象的成员。
如果要将动态对象传递给RenderPartial,您几乎不得使用反射或动态关键字来访问运行时不知道的属性。这样做是一种非常糟糕的做法。通常,您知道哪些对象传递给视图,因为您必须渲染它们。
有关如何使用动态关键字检查的详细信息,请访问:
答案 1 :(得分: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
类来填充而是转而进入View。