【问题标题】:ASP.NET MVC3 - Usage of Html.ActionLinkASP.NET MVC3 - Html.ActionLink 的使用
【发布时间】:2011-11-01 00:35:08
【问题描述】:

我需要使用格式中的 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&lt;dynamic,object&gt;, string, bool) 的最佳重载方法匹配有一些无效参数 当我使用“编辑”之类的普通文本更改上面的 item.StartTime 时,它​​可以正常工作。

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    格式参数的类型为Func&lt;dynamic, HelperResult&gt;
    它必须返回 HelperResult,而不是 IHtmlString
    它是这样定义的,允许您传递inline helper
    要传递内联助手,请删除 (item) =&gt;;内联助手隐式生成带有 item 参数的 lambda 表达式。
    要传递一个普通的 lambda 表达式,你需要让它返回一个 HelperResult instance
    HelperResults take an Action&lt;TextWriter&gt;,所以你会写

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

    编辑:我没有意识到参数被声明为Func&lt;dynamic, object&gt;。这意味着您可以传递内联帮助程序或任何其他 lambda 表达式。
    您的第二个示例应该可以工作。

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

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

    Razor 将从输出中删除 &lt;text&gt;

    【讨论】:

    • 感谢您的快速回复。我尝试了这两个选项,但没有帮助。我仍然遇到同样的错误。
    • 同样的错误信息。没有改变 ---- CS1502: 'System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' 的最佳重载方法匹配有一些无效参数跨度>
    • 我不确定我是否理解你的问题。但这是我从网页得到的 --------------------------------\Index.cshtml(96,17 ): 错误 CS1502: 'System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' 的最佳重载方法匹配有一些无效参数 \Index.cshtml(98 ,27): 错误 CS1503: 参数 3: 无法从 'lambda 表达式' 转换为 'System.Func'
    • 这通常意味着你的 lambda 中有一些语法错误。
    • 试试new { id = (string)item.BookName }
    【解决方案2】:

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

    grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime.ToString(), "ShowShippingFileMessage", new { @id = item.BookName }))
    

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多