CodeBehind中的Action Link,与当前的Request Context无关

时间:2013-10-16 05:24:28

标签: c# asp.net-mvc-4

尝试编写一个帮助方法,在代码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

0 个答案:

没有答案