Rendern von html-code mit TagBuilder und ASP.NET MVC 4 (mit Razor engine)
Möchte ich render li
Elemente mit TagBuilder.
Meiner Funktion
public static string RenderListTag(this HtmlHelper helper, string labelText, string action, string controller, bool isAdmin, string listCssClass = "")
{
string value = string.Empty;
TagBuilder li = new TagBuilder("li");
TagBuilder anchor = new TagBuilder("a");
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
if (string.IsNullOrEmpty(action) || string.IsNullOrEmpty(controller))
{
anchor.MergeAttribute("href", "#");
}
else
{
anchor.MergeAttribute("href", urlHelper.Action(action, controller, new
{
area = isAdmin ? "Admin" : ""
}));
}
anchor.SetInnerText(labelText);
if (action.IsEqualWith(helper.ViewContext.RouteData.Values["action"].ToString()))
{
li.MergeAttribute("class", "active");
}
if (!string.IsNullOrEmpty(listCssClass))
{
li.MergeAttribute("class", listCssClass);
}
li.SetInnerText(anchor.ToString(TagRenderMode.Normal));
return li.ToString(TagRenderMode.Normal);
}
Wenn ich rufe mit dem folgenden code:
@Html.RenderListTag("Home", "Index", "Contents", false)
@Html.RenderListTag("About", "About", "Home", false)
@Html.RenderListTag("Contact", "Contact", "Home", false)
@Html.RenderListTag("Show toolbar", "", "", false, "options no-display")
@Html.RenderListTag("CMS", "Index", "Home", true)
Die Ergebnisse gedruckt als text, NICHT html-tag.
<li class="active"><a href="/Contents">Home</a></li> <li><a href="/Home/About">About</a></li> <li><a href="/Home/Contact">Contact</a></li> <li class="options no-display"><a href="#">Show toolbar</a></li> <li class="active"><a href="/Admin/Home">CMS</a></li>
Will ich drucken Sie das HTML-tag nicht text.
Wo ist mein Fehler ?
InformationsquelleAutor Snake Eyes | 2013-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
@Html.Raw(Html.RenderListTag("CMS", "Index", "Home", true))
Dein code funktioniert und ich habe bis. Aber ich Folge meiner oben beschriebenen Methode.
Dies ist keine akzeptable Antwort, Erweiterungen müssen nicht gewickelt werden, mit Raw zu arbeiten. Erweiterungen ausgeben der tag als text noch nicht korrekt geschrieben wurden (In diesem Fall) . Siehe op ' s "ich fand mein Fehler"
Mit return geben Sie MvcHtmlString anstelle von string-sollte das problem auch lösen, oder nicht ?
InformationsquelleAutor Mick Walker
Fand ich meinen Fehler 🙂
Ich verwendet
Dem richtigen Weg ist
Änderte ich die Art der Funktion von
string
zuMvcHtmlString
wie:Und die Rückgabe der Funktion ist:
Nun funktioniert.
Ich würde immer benutzt:
return new HtmlString(li.ToString());
(HtmlString
ist inSystem.Web
) in NET 4.0InformationsquelleAutor Snake Eyes
Müssen Sie ihn wieder ein MvcHtmlString von Methode
InformationsquelleAutor Thregarth
Versuchen Sie, die Letzte Zeile zu:
return helper.Raw(li.ToString(TagRenderMode.Normal)).ToHtmlString();
Nun, es scheint, wie die
SetInnerText
war das eigentliche problem!Ja, stimmt. Das war mein Schmerz :))
InformationsquelleAutor Carlos Martinez T
Für Situationen wie diese, ich habe einen guten Freund in der statischen Methode HtmlDecode der HttpUtility-Klasse. Try: return MvcHtmlString.Erstellen(HttpUtility.HtmlDecode(li.ToString(TagRenderMode.Normal)));
HTH
InformationsquelleAutor Francisco Javier Banos Lemoine