尝试编写一个帮助方法,在代码Behind中生成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();
}
Callee
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
。