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

  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010
  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • steeletraining

    steeletraini

    28 NİSAN 2010