web-dev-qa-db-ja.com

WebGrid.column内のHTML.ActionLinkでデータを使用することはできませんか?

ASP.NET MVC3テストアプリケーションに次のWebGridがあります。それは顧客のリストを表示します:

_@grid.GetHtml(
tableStyle: "grid",
headerStyle: "head",
alternatingRowStyle: "alt",
columns: grid.Columns
         (
         grid.Column(format: (item) => Html.ActionLink("Edit", "Details", new { id = item.id })),
         grid.Column("Address.CompanyName"),
         grid.Column("Address.City")
         )
)
_

ここで興味深いのは、最初の列に追加した編集リンクです。単純な「編集」テストではなく、お客様のアカウント番号を使用したいと思います。ただし、そのために多くの問題が発生します。

私はもう試した:

_grid.Column(format: (item) => Html.ActionLink(item.AccountNumber.ToString(), "Details", new { id = item.id })),
_

ただし、この例外が発生し続けるため、これがどのように機能するかについて理解できないことがあるようです:

_CS1502: The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string, string, System.Func<dynamic,object>, string, bool)' has some invalid arguments
_

これが機能しない理由を誰かに説明できますか? 「編集」とitem.AccountNumber.ToString()の違いは何ですか(スペルは別として)?

「編集」テキストを使用するとリンクが機能し、AccountNumberが長いことに注意してください。

19
Thomas

これは、日付を使用した例です。

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

ダイナミクス(アイテム)で拡張メソッド(Html。*)を使用することに注意する必要があります... csharpではうまく機能しません。新しい{}プロジェクションを実行するか、ToStringを呼び出すと、動的ではなくなります。または、(object)item.Idをキャストすることもできます。

ここ から。

28
Derek Beattie

VBでそれがどのように見えるべきかについて誰かが疑問に思っている場合に備えて、ここに例があります:

grid.Column("PersonID", "Admin", Function(modelItem) Html.ActionLink("View", "Details", New With {.id = modelItem.PersonID}))
5
MVCNoobSQLGuru

私の場合、Derek Beattieソリューションが機能していません。

そして私はこれを使います

 grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ID }), style: "column-action") 
2
Developer

私の列はHtml.ActionLinkにアクセスできないように見えるモデルで生成されていました。そのため、hrefを作成してMvcHtmlStringとして返す必要がありました。これは私がやったことです、

new WebGridColumn{ColumnName="FileName", Header= "File",
                Format = item => new MvcHtmlString("<a href='" + item.FileLink + "'>" + item.FileName +"</a>")
1
lanternmarsh

グリッドには次のコードを使用します。それは私のために働いています。

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column(header: "Serial No", format:@<text><div>@(item.WebGrid.Rows.IndexOf(item) + 1)</div></text>),
        grid.Column(columnName: "Stdname", header: "Student Name"),
        grid.Column(header: "Email ID", format:@<text><a href="mailto:@item.Email">@item.Email</a></text>),
        grid.Column(header: "EDIT",format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ID })),
        grid.Column(header: "DETAILS", format: (item) => Html.ActionLink("Details", "Details", new { id = item.ID })),
        grid.Column(header: "DELETE", format: (item) => Html.ActionLink("Delete", "Delete", new { id = item.ID }))
))

これがお役に立てば幸いです。

0
Andy Rocks
 @Html.Grid(Model).Columns(columns => {
    columns.Add(c => c.ConsumerNo).Titled("Consumer No").SetWidth(70).Filterable(true);
    columns.Add(c => c.ConsumerName).Titled("Consumer Name").SetWidth(200).Filterable(true);
    columns.Add(c => c.MobileNo).Titled("Mobile No").SetWidth(70).Filterable(true);
    columns.Add(c => c.Address).Titled("Address").SetWidth(200).Filterable(true);
    columns.Add(c => c.AreaName).Titled("Area Name").SetWidth(70).Filterable(true);
    columns.Add(c => c.StaffName).Titled("Staff Name").SetWidth(100).Filterable(true);
    columns.Add().Encoded(false).Sanitized(false).Titled("INSPECT").SetWidth(60).RenderValueAs(o => Html.ActionLink("INSPECT", "InspForm", new { id = o.UniqueConsumerId, style = "background-image:url('~/Images/orderedList1.png')" }));                       
}).WithPaging(10).Sortable(true)
0
Pushpraje96

私はこのように解決しました

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

0
Virat Sarswat