【问题标题】:Razor does not work easily with strongly typed Html.ActionLink?Razor 不能轻松使用强类型的 Html.ActionLink?
【发布时间】:2010-11-11 21:01:18
【问题描述】:

伙计们,

我们正在尝试使用如下所示的强类型操作链接方法:

Html.ActionLink<HomeController>

在 Razor 视图引擎中。

我知道我们不应该一直使用它们,因为它会忽略过滤器等,但事实是我们确实使用它们。

如果我尝试像这样在 Razor 中直接使用它:

@Html.ActionLink<HomeController>(c => c.Index, "Home")

我收到以下错误:

CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments

如果您查看编译后的代码,那是因为 Razor 没有像您预期的那样解析该语句。编译后的源代码,从具有该行的错误中看起来像这样:

...
Line 101:              #line 13 "C:\dev\TheNetwork\POC\Web\Views\Policy\Edit.cshtml"
Line 102:  Write(Html.ActionLink);
Line 103:  
Line 104:              
Line 105:              #line default
Line 106:              #line hidden
Line 107:  WriteLiteral("<PolicySectionController>(c => c.Edit(null), "New\")\r\n\r\n\r\n\r\n");

为简洁起见省略了很多东西 :) 正如你所看到的,它将它拆分为“

我找到了一种解决方法,但它很难看。这有效:

@{Write(Html.ActionLink<PolicySectionController>(c => c.Edit(null), "New"));}

有人知道更好的方法吗?

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    是的,为了使用泛型方法,您需要使用括号对表达式进行转义。这行得通吗:

    @(Html.ActionLink<PolicySectionController>(c => c.Edit(null), "New"))
    

    【讨论】:

    • 是的,这行得通!仍然不理想,但比我的烂摊子要好,谢谢:)
    • 不幸的是(对于这种情况)Razor 使用&lt; 作为确定转换的字符,并且不可能以明确的方式同时支持标记和通用方法。
    • 顺便说一句,示例中的null 是多余的,下面的也可以使用@(Html.ActionLink&lt;PolicySectionController&gt;(c =&gt; c.Edit(), "New"))
    • @Michael Teper 实际上,在我的情况下, null 是必需的,因为我的编辑操作没有不带任何内容的重载,并且我没有默认参数
    • 在 MVC4 中对我不起作用。我现在正在检查 Html.ActionLink 重载,找不到任何通用的 noes。有什么想法吗?
    【解决方案2】:

    我认为你也可以这样做: @Html.ActionLink((FooController c) => c.Edit(null), "New")

    【讨论】:

      【解决方案3】:

      这对我有用:

      @using MyProjectNamespace.Controllers;
      @using Microsoft.Web.Mvc; // MVC Futures
      @{
          ViewBag.Title = "Index";
      }
      <h1>Index</h1>
      @(Html.ActionLink<FooController>(f => f.Index(), "Go (Strongly Typed)"))
      

      (两个“@using”语句都是必须的,否则不起作用)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多