L’utilizzo dei dati in un HTML.ActionLink all’interno di WebGrid.column non è ansible?

Ho il seguente WebGrid nella mia applicazione di test ASP.NET MVC3. Visualizza un elenco di clienti:

@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 interessante qui è il link Modifica che ho aggiunto nella prima colonna. Vorrei utilizzare il numero di conto del cliente al posto del semplice test “Modifica”. Tuttavia, mi provoca una grande quantità di problemi per farlo.

Ho provato:

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

Tuttavia, sembra che ci sia qualcosa che non capisco su come funziona perché continuo a ricevere questa eccezione:

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

Qualcuno può spiegarmi perché questo non funziona? Qual è la differenza tra “Modifica” e item.AccountNumber.ToString() (a parte l’ortografia)?

    Devo notare che il collegamento funziona quando si utilizza il testo “Modifica” e che AccountNumber è lungo.

    Ecco un esempio di come lo faccio con una data.

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

    Devi stare attento all’utilizzo di metodi di estensione (Html. *) Con dynamics (elemento) … non funziona bene in csharp. Quando esegui la nuova {} proiezione o chiama ToString, non è più dinamico. In alternativa, è ansible eseguire il cast: (object) item.Id.

    Da qui

    Nel caso in cui qualcuno si chiedesse come dovrebbe apparire in VB ecco un esempio:

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

    Nel mio caso la soluzione di Derek Beattie non funziona.

    E io uso questo

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

    Le mie colonne venivano generate nel modello, dove Html.ActionLink sembra inaccessibile. Quindi ho dovuto creare l’href e restituirlo come MvcHtmlString. Questo è quello che ho finito per fare,

     new WebGridColumn{ColumnName="FileName", Header= "File", Format = item => new MvcHtmlString("" + item.FileName +"") 

    Ho risolto così

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

    Io uso il seguente codice per la griglia. Funziona per me.

     @grid.GetHtml( columns: grid.Columns( grid.Column(header: "Serial No", format:@
    @(item.WebGrid.Rows.IndexOf(item) + 1)
    ), grid.Column(columnName: "Stdname", header: "Student Name"), grid.Column(header: "Email ID", format:@@item.Email), 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 })) ))

    Spero che questo sia utile.

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