无法从';转换;lambda表达式';到';system.func动态对象';MVC3剃刀

本文关键字:动态 func 对象 剃刀 system MVC3 lambda 转换 表达式 | 更新日期: 2023-09-27 18:00:58

我的视图页面中出现了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(中抛出,格式为。我哪里错了?

请帮忙。

无法从';转换;lambda表达式';到';system.func动态对象';MVC3剃刀

根据我的评论:看起来您正试图将客户端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);