这似乎很简单,但我无法得到任何工作。此代码由我的模板生成器生成,需要更改。
<li><a href="../Home/Contact" class="active"><span class="l"></span><span class="r">
</span><span class="t">Nous contacter</span></a> </li>
到目前为止,我最好的选择是:
<li><span class="l"></span><span class="r"></span>
@Html.RouteLink("Contact", new { Controller = "Home", Action = "Contact" }, new { @class = "t" })</li>
但它没有做任何事情。 只是为了说明我的问题很明确:链接适用于两种情况,这很好。格式化不起作用。这是我的问题。
答案 0 :(得分:3)
第二个将生成:
<li>
<span class="l"></span>
<span class="r"></span>
<a class="t" href="/Home/Contact">Contact</a>
</li>
这与您在第一时可能解释格式问题的内容不同:
<li>
<a href="../Home/Contact" class="active">
<span class="l"></span>
<span class="r"></span>
<span class="t">Nous contacter</span>
</a>
</li>
Html帮助程序(如Html.ActionLink和RouteLink)的问题在于它们始终通过Html对文本进行编码,因此您无法将HTML用作文本。所以有一种可能性如下:
<li>
<a href="@Url.RouteUrl("Contact", new { controller = "home", action = "contact" })" class="active">
<span class="l"></span>
<span class="r"></span>
<span class="t">Nous contacter</span>
</a>
</li>
另一种可能性,如果你有很多生成的是编写一个自定义的Html助手,它将为你完成这项工作:
public static class HtmlExtensions
{
public static IHtmlString MyLink(
this HtmlHelper htmlHelper,
string linkText,
string routeName,
object routeValues
)
{
var spans = string.Format(
"<span class=\"l\"></span><span class=\"r\"></span><span class=\"t\">{0}</span>",
htmlHelper.Encode(linkText)
);
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.RouteUrl(routeName, routeValues);
var anchor = new TagBuilder("a");
var rvd = new RouteValueDictionary(routeValues);
var rd = htmlHelper.ViewContext.RouteData;
var currentAction = rd.GetRequiredString("action");
var currentController = rd.GetRequiredString("controller");
var controller = rvd["controller"] as string;
var action = rvd["action"] as string;
if (string.Equals(controller, currentController, StringComparison.OrdinalIgnoreCase) &&
string.Equals(action, currentAction, StringComparison.OrdinalIgnoreCase))
{
anchor.AddCssClass("active");
}
anchor.Attributes["href"] = url;
anchor.InnerHtml = spans;
return new HtmlString(anchor.ToString());
}
}
然后:
<li>
@Html.MyLink("Nous contacter", "Contact", new { controller = "home", action = "contact" })
</li>
答案 1 :(得分:-1)
只需使用以下内容:
@Url.Action("Index", "Home")