试图actionlink
在代码后面编写一个辅助方法来生成。
public static String CodeBehindActionLink(UrlHelper url, String actionloction,string actiontext)
{
var linkBuilder = new TagBuilder("a");
linkBuilder.MergeAttribute("href", url.Action(actionloction)); //url is culprit here
linkBuilder.SetInnerText(actiontext);
return linkBuilder.ToString();
}
被调用者
CodeBehindActionLink(new
UrlHelper(Request.RequestContext),
Url.Action("A", "B", new { area = "C"}),"SomeName");
预期出来的就像 <a href="C/B/A">SomeName</a>
但当前上下文在锚点中添加了不必要的路线。如果它在相同的上下文中,则锚标记看起来像<a href="C/B/C/B/A" >SomeName</a>
。
我们如何覆盖这种行为。
找到的解决方案:不需要传递请求上下文。只通过actionlocation
。
linkBuilder.MergeAttribute("href", actionloction);
和被调用者看起来像
CodeBehindActionLink(
Url.Action("A", "B", new { area = "C"}),"SomeName");
因为Url.Action
已经照顾好route
。