ASP.NET MVC3 WebGrid格式:参数

我试图在ASP.NET MVC3中使用新的WebGrid,并且我希望显示一组链接图标,执行各种操作(编辑,查看,删除)……为此,我有一个HtmlHelper扩展,基本上输出HTML:

 

扩展返回MvcHtmlString,它在Razor视图中单独使用时工作正常.Eg:@ Html.ActionLinkIconForEditAction(“Customer”,2)

问题是我需要在传递对象的ID时在WebGrid列中调用此帮助程序(每个操作一次)。 我难以理解的问题是编译器给我一个错误,说它无法将MvcHtmlString(或’lambda expression’取决于我尝试的调用)转换为格式预期的System.Func …

例如,这有效:

 grid.Column(header: "", format: @@Html.ActionLinkIconForEditAction("Customer", 2)) 

但这不是:

 grid.Column(header: "", format: (customer) => @@Html.ActionLinkIconForEditAction("Customer", customer.Id)) grid.Column(header: "", format: (customer) => Html.ActionLinkIconForEditAction("Customer", customer.Id)) 

我明白了:

 Error 4 Argument 3: cannot convert from 'lambda expression' to 'System.Func' 

或者这个电话:

 grid.Column(header: "", format: Html.ActionLinkIconForEditAction("Customer", customer.Id)), 

我明白了:

 Error 5 Argument 3: cannot convert from 'System.Web.Mvc.MvcHtmlString' to 'System.Func' 

有什么奇怪我有其他列使用lambdas,直接Model.Property访问器,甚至输出String.Format(“”)…它们都工作正常…我读了Func上的所有文档和这个线程也是如此 ,仍然无法弄清楚:)

谁能发现我做错了什么?

我明白了:) ….问题似乎在于C#处理动态对象的方式……许多用户正在忙着这个……

修复就像将参数的正确类型转换为我的扩展帮助程序一样简单……所以这样做:

 grid.Column(header: "", format: @@Html.ActionLinkIconForEditAction("Customer", (int)item.Id) 

另一个技巧是在“item”对象中使用“built”而不提供你自己的..例如,这不起作用:

 grid.Column(header: "", format: (customer) => @@Html.ActionLinkIconForEditAction("Customer", (int)customer.Id) 

大量的阅读,调整,学习……希望下一个版本在您需要向不直接来自模型的列添加内容时会有更多的内容…

关心Z ……

 grid.Column(format: (item) => Html.ActionLink("EditCustomer","Editcustomer", new {CustomerId=item.CustomerId})) 

这将工作,并且上面一个也工作..这里第一个“EditCustomer”是用户可见的文本,第二个“EditCustomer”是您希望它重定向的操作的名称,并且项目是

我不得不用C#代码创建一个WebGrid ,并且必须使用超链接显示一个特定的列。 上面提到的技术都不适用于我。 所以,我使用了MvcHtmlString.create并将String.format的返回值传递给它。

 format: (item) => MvcHtmlString.Create(string.Format((A HREF=\"/Inventory/EditInventory/{0}\"){1}(/A)", item.ID, item.Property))) 

分别用<或>替换字符串内的(或)。