update tools packs net mvc microsoft language framework asp c# asp.net-mvc-3 webgrid

c# - tools - ¿Usar datos en un HTML.ActionLink dentro de WebGrid.column, no es posible?



mvc version 5 (8)

Aquí hay un ejemplo de cómo lo hago con una fecha.

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

Debe tener cuidado con el uso de métodos de extensión (Html. *) Con dinámica (elemento) ... no funciona bien en csharp. Cuando hace la nueva proyección {} o llama a ToString, ya no es dinámico. Alternativamente, podrías lanzar: (objeto) item.Id.

Desde here

Tengo la siguiente WebGrid en mi aplicación de prueba ASP.NET MVC3. Muestra una lista de clientes:

@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") ) )

La parte interesante aquí es el enlace de edición que he agregado en la primera columna. Me gustaría usar el número de cuenta de los clientes en lugar de la prueba "Editar" simple. Sin embargo, me causa muchos problemas hacerlo.

He intentado:

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

Sin embargo, parece que hay algo que no entiendo sobre cómo funciona esto porque sigo recibiendo esta excepción:

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

¿Alguien puede explicarme por qué esto no está funcionando? ¿Cuál es la diferencia entre "Editar" y el item.AccountNumber.ToString() (aparte de la ortografía)?

Debo tener en cuenta que el enlace funciona cuando se usa el texto "Editar", y que AccountNumber es muy largo.


En caso de que alguien se esté preguntando cómo debería verse en VB, aquí hay un ejemplo:

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


En mi caso la solución de Derek Beattie no funciona.

Y yo uso esto

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


He resuelto asi

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


Mis columnas se estaban generando en el Modelo, donde Html.ActionLink parece inaccesible. Así que tuve que crear el href y devolverlo como un MvcHtmlString. Esto es lo que terminé haciendo,

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


Yo uso el siguiente código para la red. Funciona para mí.

@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 })) ))

Espero que esto sea de ayuda.


@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)


grid.Column("GiftID",canSort:false, format: (item => Html.ActionLink((string)(@item.GiftID).ToString(), "Edit", new { GiftID = @item.GiftID })))