我想在一些文本中嵌入一个动作链接,该链接将存储在我的控制器的数据库中。我试图通过在控制器上下文中实例化一个新的HtmlHelper来实现这个目的:
//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();
}
但我在return语句中得到NotImplementedException
。如何从控制器的上下文中获得正确初始化的HtmlHelper?
答案 0 :(得分: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()
- 它会在某个时刻被隐含地调用。