Asp.net mvc Html.ActionLink绕过路由值的编码

Asp.net mvc Html.ActionLink绕过路由值的编码,asp.net-mvc,actionlink,Asp.net Mvc,Actionlink,我试图绕过Html.ActionLink在服务器上处理时使用的路由值编码。例如,我有以下ActionLink @Html.ActionLink("Edit", "_SoftwareRequestEdit", "SoftwareRequest", new {id = "#= Id #"}, null) 它会生成这样的链接 <a href="/Admin/SoftwareRequest/_SoftwareRequestEdit/%23%3d%20Id%20%23">Edit</a

我试图绕过Html.ActionLink在服务器上处理时使用的路由值编码。例如,我有以下ActionLink

@Html.ActionLink("Edit", "_SoftwareRequestEdit", "SoftwareRequest", new {id = "#= Id #"}, null)
它会生成这样的链接

<a href="/Admin/SoftwareRequest/_SoftwareRequestEdit/%23%3d%20Id%20%23">Edit</a>

但我不想把它发送到浏览器

<a href="/Admin/SoftwareRequest/_SoftwareRequestEdit/#= Id #">Edit</a>


“#=Id#”路由值必须按原样发送到浏览器,因为它是由前端框架剑道UI Web处理的,该Web将表达式“#=Id#”替换为相应的整数值。

这相当混乱。。。但是,如果您需要这样做,您总是可以手动构建标记

<a href="@(Url.Action("Edit", "_SoftwareRequestEdit", "SoftwareRequest"))/#= ID #">Edit</a>

请注意,我还没有测试这个代码

编辑:
实际上,它可能会满足您的需要,因为大多数浏览器都会对“a”标记中的任何内容进行url编码,因为空格不是有效的url字符:

Html.ActionLine有一个带有片段参数的重载

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes)

协议和主机名只能传递空字符串

如果我不想使用多个路由值(链接参数),该怎么办?在这种情况下,我只需要传递一个参数,您的解决方案就可以了。所以,我将用你建议的答案来结束这个问题。很抱歉,我不理解你的回答。我尝试使用您建议将空字符串传递给主机和协议的重载,但MVC仍然向浏览器发送编码链接,如我的问题所示。routeValues={},fragment=“=Id#”我更喜欢@Familipie方法。