我目前正在将我的aspx mvc视图迁移到剃须刀引擎,但是当涉及到我的助手时,我遇到了一些头脑问题。
我不确定为什么但是当我尝试在html扩展表单中使用帮助程序时,我的帮助程序是用文本而不是标记来呈现的,我得到的文本不是html。
扩展程序的代码是:
public static string LinkButton(this HtmlHelper helper, string id, string value, string target, object htmlAttributes)
{
var linkButton = new TagBuilder("div");
var attributes = new RouteValueDictionary(htmlAttributes);
linkButton.MergeAttribute("id", id);
//-- apply the button class to the div and any other classes to the button
linkButton.MergeAttribute("class", attributes.ContainsKey("class") ? string.Format("linkbutton {0}", attributes["class"]) : "linkbutton");
var content = new TagBuilder("a");
content.MergeAttribute("href", target);
content.InnerHtml = value;
linkButton.InnerHtml = content.ToString();
return linkButton.ToString();
}
这是一个非常简单的扩展,其用法如下:
[ul] @foreach (UpModule module in ViewBag.Modules) { [li]@Html.LinkButton(module.Name, module.Value, module.Target, new {@class = "landingButton"});[/li] } [/ul]
除了错误的html标签之外,我搞砸了什么呢?
修改 我应该注意到错误的标记是存在的,因为我无法在我的问题中显示正确的标记,我完全意识到它不起作用。
答案 0 :(得分:0)
@voroninp将返回类型从字符串切换到MvcHtmlString工作得很好但是,在这种情况下使用声明性帮助器是一个更好的更清晰的选项,虽然为更复杂的帮助器切换返回类型会更好。