asp.net-mvc-3 – 剃刀不能轻松地使用强类型的Html.ActionLink?

伙计们,

我们试图使用强类型的动作链接方法,如下所示:

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"))

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....