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

  • midomansour

    midomansour

    19 EYLÜL 2009
  • natescamp

    natescamp

    30 NİSAN 2009
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006