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

  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012
  • whatever

    whatever

    30 EYLÜL 2005