2

我需要使用格式中的 Html.ActionLink:grid.Column 规范的属性。我的代码如下:

grid.GetHtml(

  grid.Columns( 
    grid.Column(header: "Column 1", format: (item) => @<div class='webgrid-bookname-column-style'> @item.BookName </div>),
    grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime, "ShowShippingFileMessage", new { @id = item.BookName }))
  )
)

当我使用这种语法时,它给了我最好的重载方法匹配的编译错误System.Web.Helpers.WebGrid.Column(string, string, System.Func<dynamic,object>, string, bool)有一些无效的参数当我用像“编辑”这样的普通文本更改上面的 item.StartTime 时,它​​工作正常。

我是 ASP.NET 的新手,谁能帮我理解上述陈述有什么问题?

提前致谢。

4

2 回答 2

1

格式参数的类型为Func<dynamic, HelperResult>
它必须返回一个HelperResult,而不是一个IHtmlString
它以这种方式定义以允许您传递内联帮助程序。
要传递内联帮助程序,请删除(item) =>; 内联助手隐式生成带有item参数的 lambda 表达式。
要传递一个普通的 lambda 表达式,你需要让它返回一个HelperResult实例
HelperResults拿一个Action<TextWriter>,所以你会写

item => new HelperResult(w => w.Write(Html.ActionLink(...).ToHtmlString()))

编辑:我没有意识到参数被声明为Func<dynamic, object>. 这意味着您可以传递内联帮助程序或任何其他 lambda 表达式。
你的第二个例子应该有效。

您还可以使用内联助手。要在没有 HTML 标记的情况下执行此操作,请使用特殊的<text>标记:

item => @<text>@Html.ActionLink(...)</text>

Razor 将从<text>输出中删除。

于 2011-11-01T00:38:32.007 回答
0

您传递的显示字符串属于 DateTime 类型。尝试提供字符串输入。

grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime.ToString(), "ShowShippingFileMessage", new { @id = item.BookName }))
于 2012-10-15T04:04:23.080 回答