伙计们,
Html.ActionLink<HomeController>
在剃须刀视图引擎.
我知道我们不应该一直使用它们,因为它忽略过滤器等,但实际上我们是使用它们.
如果我尝试直接在剃刀中使用这样的话:
@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");
为简洁起见省略了很多东西:)正如你所看到的,它将它分割在“<”我认为这是将HTML解释为HTML标签,但我无法确定. 我找到了一个解决方法,但它是丑陋的.这样做:
@{Write(Html.ActionLink<PolicySectionController>(c => c.Edit(null),"New"));}
有没有人知道一个更好的方式来做到这一点?
解决方法
是的,为了使用泛型方法,你需要使用括号来转义表达式.这将工作:
@(Html.ActionLink<PolicySectionController>(c => c.Edit(null),"New"))