2015-04-05 53 views
0

我正在创建一个MVC项目,我有一个共享的部分视图,我想要一个链接到根站点,带有参数。所以https://site.invalid/j123456-123。我能做到这一点的唯一方法是使用HTML.Raw。我宁愿使用更多的MVC约定中的方法。如何创建MVC5动作链接到根路由 - 没有查询字符串

<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方法有效,动作链接产生/?parameter=J123456-123。我不想要?或链接上显示的参数名称。

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

因为我想用路由的属性是当我提出上述请求 [Route("~/{parameter:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")]

我的路线不会被调用。

回答

0

而不是ActionLink使用RouteLink。使用使用路由名称的RouteLink,然后将routename包含在routeValues对象中。

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

至少这是我目前使用的是什么工作对我来说,什么...

0

Html.ActionLink生成指向控制器操作的链接。所以,如果你想链接到被称为所谓的“myController的”一个叫参数控制器上的“MyAction”动作“参数”你的链接应该是这样的:

@Html.ActionLink(item.value, "MyAction", "MyController", new { parameter = item.value }, null) 

而且您的控制器是这样的(假设你的正则表达式是正确的):

public class MyController : Controller 
{ 
    [Route("~/{parameter:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")] 
    public ActionResult MyAction(string parameter) 
    { 
     ... 
    } 
} 

如果该参数是行动本身的“myController的”的名字,那么你需要把它作为这样

你的链接应该是这样的:

@Html.ActionLink(item.value, item.value, "MyController") 

而且您的控制器是这样的(如果item.value =“参数”)

public class MyController : Controller 
{ 
    [Route("~/Parameter")] 
    public ActionResult Parameter() 
    { 
     ... 
    } 
} 

如果你想链接到的东西是不是在你的控制器中的一个动作,那么你应该只是使用标准的HTML和Razor来形成链接

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