ASP.NET MVC3 WebGrid格式:参数

zam*_*6ak 12 c# lambda webgrid asp.net-mvc-3

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

<a href="" title=""><img alt="" src="" /></a>
Run Code Online (Sandbox Code Playgroud)

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

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

例如,这有效:

grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", 2)</text>)
Run Code Online (Sandbox Code Playgroud)

但这不是:

grid.Column(header: "", format: (customer) => @<text>@Html.ActionLinkIconForEditAction("Customer", customer.Id)</text>)
grid.Column(header: "", format: (customer) => Html.ActionLinkIconForEditAction("Customer", customer.Id))
Run Code Online (Sandbox Code Playgroud)

我明白了:

Error 4 Argument 3: cannot convert from 'lambda expression' to 'System.Func<dynamic,object>'
Run Code Online (Sandbox Code Playgroud)

或者这个电话:

grid.Column(header: "", format: Html.ActionLinkIconForEditAction("Customer", customer.Id)),
Run Code Online (Sandbox Code Playgroud)

我明白了:

Error 5 Argument 3: cannot convert from 'System.Web.Mvc.MvcHtmlString' to 'System.Func<dynamic,object>'
Run Code Online (Sandbox Code Playgroud)

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

谁能发现我做错了什么?

zam*_*6ak 15

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

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

grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", (int)item.Id)
Run Code Online (Sandbox Code Playgroud)

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

grid.Column(header: "", format: (customer) =>  @<text>@Html.ActionLinkIconForEditAction("Customer", (int)customer.Id)
Run Code Online (Sandbox Code Playgroud)

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

关心Z ......

  • 为什么使用@ <text>? (5认同)