2015-04-05 87 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>