2014-09-11 97 views
1

我想在一些文本中嵌入操作鏈接,這些文本將從控制器存儲在數據庫中。我試圖通過控制環境中實例化一個新的HtmlHelper來實現:從控制器檢索生成的ActionLink html

//Controller 
public ActionResult Foo() 
{ 
    var x = ThemedActionLink(/*Parameters*/); 
    //save x to database 
    return View(); 
} 

//Custom HtmlHelper code 
private class EmptyViewDataContainer : IViewDataContainer 
{ 
    public ViewDataDictionary ViewData { get; set; } 
} 

public static string ThemedActionLink(
    //Parameters 
    ) 
{ 
    var helper = new HtmlHelper(new ViewContext(), new EmptyViewDataContainer()); 
    var preTheming = //Generate pre-element wrapper 
    var postTheming = //Generate post-element wrapper 
    return MvcHtmlString.Create(
     preTheming 
     + helper.ActionLink(text, action, controller) 
     + postTheming).ToString(); 
} 

,但我得到NotImplementedException上return語句。我如何從控制器的上下文中獲得正確初始化的HtmlHelper?

回答

1

可能更容易利用TagBuilder和控制器的UrlHelper屬性。

var a = new TagBuilder("a"); 
var url = Url.Action(action, controller); 

a.InnerHtml(text); 
a.Attributes.Add("href", url); 

return MvcHtmlString.Create(preTheming + a.ToString() + postTheming); 

我大概也留下了最後ToString() - 它會被隱含在某些時候調用。