سؤال

لدي وجهة نظر جزئية في تطبيق Test ASP.NET MVC. هذه الرأي مسؤولة عن عرض أزرار قائمة التطبيقات.

أريد تغيير لون الزر الموجود حاليا صفحة نشطة. حاليا لقد كتبت شيئا مثل:

<ul id="menu">
    <% var activeClass = (string)(ViewData["currentPage"]) == "Home" ? "activeMenuButton" : ""; %>    
    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li>

    <% activeClass = (string)(ViewData["currentPage"]) == "About" ? "activeMenuButton" : ""; %>    
    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li>
</ul>

وقم بتعيين بيانات العرض في إجراءات تحكم:

//in home action
ViewData["currentPage"] = "Home";

//in About action
ViewData["currentPage"] = "About";

هذا يعمل ولكن علي تعديل كل إجراء تحكم. هل هناك أي طريقة أفضل للكشف تلقائيا عن طريقة العرض وتغيير بطريقة أو بأخرى رمز العرض الجزئي لتغيير اللون وفقا لذلك.

هل كانت مفيدة؟

المحلول

أعتقد أنك لا تحتاج إلى viewdata ["currentpagepage"]. يستخدم ViewContext.RouteData.Values في حين أن:

جرب هذا:

<ul id="menu">
    <% var activeClass = (ViewContext.RouteData.Values["Controller"] == "Home"
        && ViewContext.RouteData.Values["Action"] == "Home") ? "activeMenuButton" : ""; %>

    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li>

    <% activeClass = (ViewContext.RouteData.Values["Controller"] == "Home"
        && ViewContext.RouteData.Values["Action"] == "About") ? "activeMenuButton" : ""; %>

    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li>
</ul>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top