.net 如何创建到根路由的MVC5 ActionLink——无需查询字符串

.net 如何创建到根路由的MVC5 ActionLink——无需查询字符串,.net,asp.net-mvc-5,.net,Asp.net Mvc 5,我正在创建一个MVC项目,我有一个共享的局部视图,其中我想要一个到根站点的链接,带有一个参数。所以我能做到这一点的唯一方法是使用HTML.Raw。我更愿意使用更符合MVC约定的方法 <a href="@Html.Raw(string.Format("/{0}", item.value))">@item.value</a> @Html.ActionLink(item.value,null, new{controller="MyController", action=str

我正在创建一个MVC项目,我有一个共享的局部视图,其中我想要一个到根站点的链接,带有一个参数。所以我能做到这一点的唯一方法是使用HTML.Raw。我更愿意使用更符合MVC约定的方法

<a href="@Html.Raw(string.Format("/{0}", item.value))">@item.value</a> 
@Html.ActionLink(item.value,null, new{controller="MyController", action=string.Empty, parameter= item.value})
原始html方法有效,actionlink生成/?参数=J123456-123。我两个都不想要?或链接上显示的参数名称

我最初尝试使用传统路由,但现在使用基于属性的路由

我要使用的路线的属性是 [路由~/{参数:regex[aAjJfF]\\d+-\\d+},Name=ViewByParam]


当我发出上述请求时,确实会调用我的路由。

Html.ActionLink生成指向控制器操作的链接。因此,如果您试图在名为MyController的控制器上使用名为parameter的参数链接到名为MyAction的操作,您的链接将如下所示:

@Html.ActionLink(item.value, "MyAction", "MyController", new { parameter = item.value }, null)
@Html.ActionLink(item.value, item.value, "MyController")
假设你的正则表达式是正确的,你的控制器会是这样的:

public class MyController : Controller
{
    [Route("~/{parameter:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")]
    public ActionResult MyAction(string parameter)
    {
        ...
    }
}
如果参数是MyController上操作本身的名称,则需要将其作为名称传递

您的链接如下所示:

@Html.ActionLink(item.value, "MyAction", "MyController", new { parameter = item.value }, null)
@Html.ActionLink(item.value, item.value, "MyController")
如果item.value=Parameter,您的控制器将如下所示

public class MyController : Controller
{
    [Route("~/Parameter")]
    public ActionResult Parameter()
    {
        ...
    }
}
如果您试图链接到某个控制器上的非操作,那么您应该使用标准html和Razor来形成链接

<a href="/@(item.value)">@item.value</a>

使用RouteLink代替ActionLink。使用使用路由名称的RouteLink,然后在routeValues对象中包含routename

@Html.RouteLink(linkText, "ViewByParam", new {controller= "controllerName", action="ViewByParam", id=item.Id})
在控制器内部,使用属性:

[Route("~/{id:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")]
public ActionResult ViewByParam(string id)
至少这是我的工作方式,也是我目前正在使用的