Использование данных в HTML.ActionLink внутри WebGrid.column, не возможно? - PullRequest
19 голосов
/ 29 мая 2011

В моем тестовом приложении 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")
         )
)

Интересная часть здесь - ссылка редактирования, которую я добавил в первом столбце.Я хотел бы использовать номер счета клиента вместо простого "Edit" -test.Тем не менее, это вызывает у меня массу проблем.

Я пробовал:

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

Может кто-нибудь объяснить мне, почему это не работает?В чем разница между «Edit» и item.AccountNumber.ToString() (кроме орфографии)?

Следует отметить, что ссылка работает при использовании текста «Edit», и что AccountNumber является длинным

Ответы [ 8 ]

28 голосов
/ 29 мая 2011

Вот пример того, как я делаю это с датой.

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

Вы должны остерегаться использования расширения методы (HTML. *) с динамикой (вещь) ... это не работает в CSharp. Когда вы делаете новый {} проекция или вызов ToString, это не более динамичный Или вы мог разыграть: (объект) item.Id.

С здесь .

5 голосов
/ 17 августа 2012

На всякий случай, если кому-то интересно, как он должен выглядеть в VB, вот пример:

grid.Column("PersonID", "Admin", Function(modelItem) Html.ActionLink("View", "Details", New With {.id = modelItem.PersonID}))
2 голосов
/ 24 февраля 2013

В моем случае решение Дерека Битти не работает.

И я использую это

 grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ID }), style: "column-action") 
1 голос
/ 28 мая 2015

Мои столбцы были сгенерированы в модели, где Html.ActionLink кажется недоступным. Поэтому мне пришлось создать href и вернуть его как MvcHtmlString. Это то, что я закончил,

new WebGridColumn{ColumnName="FileName", Header= "File",
                Format = item => new MvcHtmlString("<a href='" + item.FileLink + "'>" + item.FileName +"</a>")
0 голосов
/ 11 марта 2016
 @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 голосов
/ 22 сентября 2015

Я использую следующий код для сетки. Это работает для меня.

@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 голосов
/ 08 сентября 2015
 grid.Column("GiftID",canSort:false, format: (item => Html.ActionLink((string)(@item.GiftID).ToString(), "Edit", new { GiftID = @item.GiftID })))
0 голосов
/ 06 марта 2013

Я решил вот так

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

...