我需要以grid.Column规范的格式:property来使用Html.ActionLink。 我的代码如下:
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的新手,有谁可以帮我理解上述陈述的错误?
提前致谢。
答案 0 :(得分:1)
格式参数的类型为 Func<dynamic, HelperResult>
它必须返回HelperResult
,而不是IHtmlString
它以这种方式定义,允许您传递inline helper
要传递内联帮助器,请删除(item) =>
;内联助手隐式生成带有item
参数的lambda表达式
要传递正常的lambda表达式,您需要使其返回HelperResult
instance
HelperResult
s take an Action<TextWriter>
,所以你会写
item => new HelperResult(w => w.Write(Html.ActionLink(...).ToHtmlString()))
击> <击> 撞击>
编辑:我没有意识到该参数被声明为Func<dynamic, object>
。这意味着您可以传递内联帮助器或任何其他lambda表达式
你的第二个例子应该有效。
您还可以使用内联帮助程序。要在没有HTML标记的情况下执行此操作,请使用特殊的<text>
标记:
item => @<text>@Html.ActionLink(...)</text>
Razor会从输出中删除<text>
。
答案 1 :(得分:0)
您传递的显示字符串是DateTime类型。尝试给出字符串输入。
grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime.ToString(), "ShowShippingFileMessage", new { @id = item.BookName }))