我正在尝试在 ASP.NET MVC3 中使用新的 WebGrid 以及我想显示一组执行各种操作(编辑、查看、删除)的链接图标的列之一... 为此,我有一个基本上输出以下 HTML 的 HtmlHelper 扩展:
<a href="" title=""><img alt="" src="" /></a>
扩展返回 MvcHtmlString 并且在 Razor View 中单独使用时它工作正常..例如: @Html.ActionLinkIconForEditAction("客户", 2)
问题是我需要在传递对象的 ID 时在 WebGrid 列中调用此帮助程序(每个操作一次)。我遇到的问题是编译器给我一个错误,说它不能将 MvcHtmlString(或“lambda 表达式”,取决于我尝试的调用)转换为格式预期的 System.Func...
例如,这有效:
grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", 2)</text>)
但这不是:
grid.Column(header: "", format: (customer) => @<text>@Html.ActionLinkIconForEditAction("Customer", customer.Id)</text>)
grid.Column(header: "", format: (customer) => Html.ActionLinkIconForEditAction("Customer", customer.Id))
我得到:
Error 4 Argument 3: cannot convert from 'lambda expression' to 'System.Func<dynamic,object>'
或者对于这个调用:
grid.Column(header: "", format: Html.ActionLinkIconForEditAction("Customer", customer.Id)),
我得到:
Error 5 Argument 3: cannot convert from 'System.Web.Mvc.MvcHtmlString' to 'System.Func<dynamic,object>'
奇怪的是,我还有其他列使用 lambda、直接 Model.Property 访问器,甚至来自 String.Format("") 的输出...它们都工作正常... 我阅读了关于 Func 和 this thread as well 的所有文档, 还是不太明白 :)
谁能发现我做错了什么?
最佳答案
我明白了:) .... 问题似乎出在 C# 处理动态对象的方式上......很多用户都对此感到兴奋......
修复非常简单,只需将参数的正确类型转换为我的扩展助手... 所以这有效:
grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", (int)item.Id)
另一个技巧是在“item”对象中使用“built”而不是提供你自己的..所以,例如,这是行不通的:
grid.Column(header: "", format: (customer) => @<text>@Html.ActionLinkIconForEditAction("Customer", (int)customer.Id)
大量阅读、调整、学习... 希望当您需要向不是直接来自模型的列添加内容时,下一个版本会更容易使用...
问候 Z...
关于c# - ASP.NET MVC3 WebGrid 格式 : parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5122691/