SORU
12 HAZİRAN 2011, Pazar


MVC aktif sayfa link almak için iyi bir yol 3 Razor

Belirli bir sayfayı etkin olması için özel bir menü bağlantısını istediğim zaman, Jilet bu yaklaşımı kullanıyorum:

Ana düzeni bu çekler var:

var active = ViewBag.Active;
const string ACTIVE_CLASS = "current";

if (active == "home")
{
    ViewBag.ActiveHome = ACTIVE_CLASS;
}
if (active == "products")
{
    ViewBag.ActiveProducts = ACTIVE_CLASS;
}

vb.

Ana düzeni html menü:

<ul>
<li class="@ViewBag.ActiveHome"><a href="/">Home</a></li>
<li class="@ViewBag.ActiveProducts"><a href="@Url.Action("index", "products")">Products</a></li>
</ul>

Farklı bir görünüm kullanmak için hangi belirtirken:

@{
    ViewBag.Active = "home";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Daha iyi bir yaklaşım, aktif bağlantılar, ben şu anda kullanıyorum birden sepcify var mı?

CEVAP
12 HAZİRAN 2011, Pazar


Daha iyi bir yaklaşım HTML bir yardımcı kullanın:

using System.Web.Mvc; 
using System.Web.Mvc.Html;

public static class MenuExtensions
{
    public static MvcHtmlString MenuItem(
        this HtmlHelper htmlHelper, 
        string text,
        string action, 
        string controller
    )
    {
        var li = new TagBuilder("li");
        var routeData = htmlHelper.ViewContext.RouteData;
        var currentAction = routeData.GetRequiredString("action");
        var currentController = routeData.GetRequiredString("controller");
        if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
            string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
        {
            li.AddCssClass("active");
        }
        li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
        return MvcHtmlString.Create(li.ToString());
    }
}

ve sonra:

<ul>
    @Html.MenuItem("Home", "Home", "Home")
    @Html.MenuItem("Products", "Index", "Products")
</ul>

Web.yukarıdaki görüşlerin uzantısı kabul etmemiz gerekir işi yapmak için: hit config, ad etiketi içinde <add namespace="yourNamespacehere.Helpers" /> klasör Ekle. Daha sonra proje ve yapı kapatmak ve yeniden açmak için bu eklediğiniz görüntüleyin.

geçerli eylem ve denetleyici dayalı Yardımcısı çapa oluştururken ya da değil active sınıf katacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012
  • sk8ingis4me

    sk8ingis4me

    16 Mart 2006
  • Warner Bros. UK

    Warner Bros.

    6 HAZİRAN 2008