使用对象名称作为与ActionLink的链接,而不是硬编码的文字

时间:2012-08-21 20:23:06

标签: c# javascript asp.net-mvc

我正在尝试让我的WebGrid使用我的实体名称作为链接。如果我这样做:

grid.Column("Name"),

网格显示网格每行中实体的名称:

enter image description here

但是,我希望名称显示为链接。最接近我的工作就是这样做:

grid.Column("Name", format: (item) => @Html.ActionLink("Edit", "Edit", new { id = item.Id })),

enter image description here

但是,正如您所看到的,每个名字都是编辑。如何在那里获得实际的对象名称?我尝试了这个,但是我得到了一个错误(唯一的区别是我正在尝试使用item.Name代替“编辑”作为ActionLink方法的第一个参数):

grid.Column("Name", format: (item) => @Html.ActionLink(item.Name, "Edit", new { id = item.Id })),

错误:TrackerJob>>' has no applicable method named 'ActionLink' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

3 个答案:

答案 0 :(得分:1)

format是func,它具有dynamic类型的输入参数和item的结果类型.Name在编译时也是动态的。并且正如错误所述使用以下代码:

grid.Column("Name", format: (item) => @Html.ActionLink((string)item.Name, "Edit", new { id = item.Id })

答案 1 :(得分:0)

尝试交换参数?

grid.Column("Name", format: (item) => @Html.ActionLink("Edit", item.Name, new { id = item.Id }))
第一次评论后

尝试使用ActionLink的重载以及更多参数(from here):

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues,
    IDictionary<string, Object> htmlAttributes
)

因为只有字符串,重载才会变得模棱两可。或者在定义ActionLink时使用命名参数。

答案 2 :(得分:0)

试图调查GetSelectLink()?更多相关信息:http://weblogs.asp.net/andrebaltieri/archive/2010/11/02/asp-net-mvc-3-working-with-webgrid-part-2.aspx

就个人而言,我会坚持自己制作表格 - 当他们获得更多定制时,我发现它不那么令人困惑,但这是我的看法。

编辑: 你可以做这样的事情,但我再次强调你有点远离这个“简单”的点:

item.GetSelectLink(String.Format("<a href='{0}'>{1}</a>", Url.Action("Edit", new { id = item.Id }), item.Name))