c# - ASP.NET MVC3 WebGrid 格式 : parameter

标签 c# lambda asp.net-mvc-3 webgrid

我正在尝试在 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/

相关文章:

asp.net-mvc-3 - Asp.Net MVC 3 url 中的变量

c# - 如何在更大的文本框中编辑 DataGridView 文本单元格

c# - 将复杂结构从 C++ 编码到 C#

java - 将 List<Integer> 转换为字符串

asp.net-mvc - 获取记录时出错 "LINQ to Entities does not recognize the method"

javascript - 试图让 Telerik ScriptRegistrar 加载 Telerik 脚本和自定义脚本

c# - 如何覆盖路由表中的 .svc 文件?

c# - 用逗号打印偶数,除了最后一个在 C# 中不起作用

c++ - 在C++线程对象中重新绑定(bind)*this, move 构造函数, move 赋值

Java 8 - 有效的最终变量、lambdas 和 try/catch/finally block