【问题标题】:Cannot convert from 'lambda expression' to 'system.func dynamic object ' MVC3 Razor无法从“lambda 表达式”转换为“system.func 动态对象”MVC3 Razor
【发布时间】:2014-04-29 13:59:24
【问题描述】:

我在查看页面中收到上述错误和 WebGrid.column 错误的“无效参数”。

//查看

@{
    WebGrid grid = new WebGrid(Model.LoadProductDetails());
     @grid.GetHtml(
         tableStyle: "grid",
         fillEmptyRows: false,
         headerStyle: "gvHeading",
         alternatingRowStyle: "gvAlternateRow",
         rowStyle: "gvRow",
         footerStyle: "gvFooter",
         mode: WebGridPagerModes.All,
         firstText: "<< First",
         previousText: "< Prev",
         nextText: "Next >",
         lastText: "Last >>",
         columns: new[] {
         grid.Column("ProductId",header: "ID"),
         grid.Column("ProductName",header: "Product"),
         grid.Column("Price"),
         grid.Column("Qunatity"),     
         grid.Column("ReorderLevel", header: "R.O.L."),
         grid.Column("ContactusId", header: "Action", canSort:false, format: @<text> @Html.Raw("<img src='/img/edit.png' title='Edit' onclick='EditProduct("+ item.ProductId  ")'  />") @Html.Raw("<img src='/img/delete.png' title='Delete' onclick='DeleteProduct("+ item.ProductId +")'  />") </text>)       
     })    
}

错误在格式: 附近的最后一列(ContactUsId)中抛出。我哪里错了?

请帮忙。

【问题讨论】:

  • 看起来您正试图将客户端 HTML 注入服务器端函数调用(这反过来会生成客户端输出)。这与 MVC 的工作方式相反(代码注入页面 HTML)。您需要将这些 @&lt;&gt; 转换为 C# 字符串。然后可以在服务器端进行处理,生成的GetHtml 方法会将最终结果注入到输出中。
  • @TrueBlueAussie:你能分享一段代码吗?
  • 当然。下面的例子。

标签: c# asp.net-mvc-3 razor webgrid


【解决方案1】:

根据我的评论:您似乎正试图将客户端 HTML 注入服务器端函数调用(进而生成客户端输出)。这与 MVC 的工作方式相反(代码注入页面 HTML)。您需要将这些 @ 转换为 C# 字符串。然后它可以在服务器端进行处理,生成的 GetHtml 方法会将最终结果注入到输出中。

示例:这样的事情

@{
    string template = "<text><img src='/img/edit.png' title='Edit' onclick='EditProduct("+ item.ProductId + ")' /><img src='/img/delete.png' title='Delete' onclick='DeleteProduct("+ item.ProductId +")' /></text>";
    WebGrid grid = new WebGrid(Model.LoadProductDetails());
     @grid.GetHtml(
         tableStyle: "grid",
         fillEmptyRows: false,
         headerStyle: "gvHeading",
         alternatingRowStyle: "gvAlternateRow",
         rowStyle: "gvRow",
         footerStyle: "gvFooter",
         mode: WebGridPagerModes.All,
         firstText: "<< First",
         previousText: "< Prev",
         nextText: "Next >",
         lastText: "Last >>",
         columns: new[] {
         grid.Column("ProductId",header: "ID"),
         grid.Column("ProductName",header: "Product"),
         grid.Column("Price"),
         grid.Column("Qunatity"),     
         grid.Column("ReorderLevel", header: "R.O.L."),
         grid.Column("ContactusId", header: "Action", canSort:false, format: template)    
}

对任何错别字表示歉意,但这只是为了表明您应该做什么,而不是尝试使用 Razor 语法将 HTML 注入 C#(这永远不会起作用)。

为了提高可读性,我将使用string.Format 替换模板字符串中的标记。

例如

    string template = string.format("<text><img src='/img/edit.png' title='Edit' onclick='EditProduct({0})' /><img src='/img/delete.png' title='Delete' onclick='DeleteProduct({0})' /></text>", item.ProductId);

【讨论】:

  • 错误在哪一行?正如我在分析器中所说,对任何错别字表示歉意。这旨在为您指明正确的方向,而不是为您完成所有编码:)
  • 最后一列的同一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
相关资源
最近更新 更多