0

WebGrid にエンティティの名前をリンクとして使用させようとしています。私がこれを行うだけなら:

grid.Column("Name"),

グリッドには、グリッドの各行にエンティティの名前が表示されます。

ここに画像の説明を入力

ただし、名前をリンクとして表示したい。これを機能させるのに最も近いのは、これを行うことです:

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

ここに画像の説明を入力

しかし、ご覧のとおり、すべての名前は Edit です。そこで実際のオブジェクト名を取得するにはどうすればよいですか? これを試しましたが、エラーが発生しました (唯一の違いは、ActionLink メソッドの最初のパラメーターとして "Edit" の代わりに item.Name を使用しようとしていることです):

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.

4

3 に答える 3

1

形式は func で、入力パラメーターが動的であり、結果として item.Name の型がコンパイル時に動的です。そしてエラーが言うように、次のコードを使用してください:

grid.Column("Name", format: (item) => @Html.ActionLink((string)item.Name, "Edit", new { id = item.Id })
于 2012-08-21T22:19:10.873 に答える
0

引数を入れ替えてみませんか?

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

最初のコメントの後

より多くのパラメーターでActionLinkのオーバーロードを使用してみてください(ここから):

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

オーバーロードは文字列だけではあいまいになる可能性があるためです。または、ActionLinkを定義するときに名前付きパラメーターを使用します。

于 2012-08-21T20:25:45.423 に答える
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))
于 2012-08-21T20:38:53.040 に答える