无法在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\")
         )
)
这里有趣的部分是我在第一栏中添加的Edit-link。我想使用客户帐号而不是普通的“编辑”测试。但是,这样做给我带来了很多问题。 我试过了:
grid.Column(format: (item) => Html.ActionLink(item.AccountNumber.ToString(),
但是,似乎有些我不了解其工作原理,因为我不断收到此异常:
CS1502: The best overloaded method match for \'System.Web.Helpers.WebGrid.Column(string,string,System.Func<dynamic,object>,bool)\' has some invalid arguments
谁能向我解释为什么这行不通? \“ Edit \”和
item.AccountNumber.ToString()
(除拼写外)有什么区别? 我应该注意,该链接在使用\“ Edit \”文本时有效,并且
AccountNumber
很长。     

解决方法

        这是我如何处理日期的示例。
grid.Column(columnName: \"Date\",format: (item) => Html.ActionLink(((string)item.Date),\"Edit\",new { id = item.id })),
  您必须提防使用扩展名   动力学方法(Html。*)   (项目)...在   尖锐的当您使用新的{}时   投影或调用ToString,不是   更长的动态。或者,你   可以转换:(object)item.Id。 从这里。     ,        以防万一有人想知道它在VB中的外观,这是一个示例:
grid.Column(\"PersonID\",\"Admin\",Function(modelItem) Html.ActionLink(\"View\",\"Details\",New With {.id = modelItem.PersonID}))
    ,        就我而言,Derek Beattie解决方案不起作用。 我用这个
 grid.Column(format: (item) => Html.ActionLink(\"Edit\",new { id = item.ID }),style: \"column-action\") 
    ,        我的列是在Model中生成的,其中Html.ActionLink似乎无法访问。因此,我必须创建href并将其作为MvcHtmlString返回。这就是我最终要做的
new WebGridColumn{ColumnName=\"FileName\",Header= \"File\",Format = item => new MvcHtmlString(\"<a href=\'\" + item.FileLink + \"\'>\" + item.FileName +\"</a>\")
    ,        我已经解决了
grid.Column(\"Id\",format: (item) => Html.ActionLink((string)item.id.ToString(),new { id = item.id }))
    ,        我将以下代码用于网格。它为我工作。
@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\",new { id = item.ID })),grid.Column(header: \"DETAILS\",format: (item) => Html.ActionLink(\"Details\",grid.Column(header: \"DELETE\",format: (item) => Html.ActionLink(\"Delete\",\"Delete\",new { id = item.ID }))
))
希望这会有所帮助。     ,        
 @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(),new { GiftID = @item.GiftID })))