ASP.NET MVC3 - Html.ActionLink的用法

时间:2011-11-01 00:35:09

标签: asp.net asp.net-mvc-3 html.actionlink

我需要以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的新手,有谁可以帮我理解上述陈述的错误?

提前致谢。

2 个答案:

答案 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 }))