বুটস্ট্র্যাপে active
ক্লাসটি <li>
এলিমেন্টে প্রয়োগ করা উচিত এবং না <a>
। এখানে প্রথম উদাহরণটি দেখুন: http://getbootstrap.com/components/#navbar
আপনি কীভাবে সক্রিয় আছেন বা না তা ভিত্তিতে আপনার ইউআই স্টাইলটি যেভাবে পরিচালনা করবেন তার সাথে এএসপি.নেট এমভিসি এর সহায়কটির কোনও সম্পর্ক নেই ActionLink
। বুটস্ট্র্যাপ ফ্রেমওয়ার্কটি কীভাবে তৈরি করা হয়েছিল তা অনুসরণের এটি যথাযথ সমাধান।
<ul class="nav navbar-nav">
<li class="active">@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
সম্পাদনা:
যেহেতু আপনি সম্ভবত একাধিক পৃষ্ঠায় আপনার মেনুটি পুনরায় ব্যবহার করছেন, সুতরাং নির্বাচিত শ্রেণিকে স্বয়ংক্রিয়ভাবে বর্তমান পৃষ্ঠার উপর ভিত্তি করে মেনুটিকে একাধিক বার অনুলিপি করার পরিবর্তে ম্যানুয়ালি করার উপায় আছে বুদ্ধিমানের কাজ হবে।
সবচেয়ে সহজ উপায় হ'ল অন্তর্ভুক্ত থাকা মানগুলি ViewContext.RouteData
, যথা নামগুলি Action
এবং Controller
মানগুলি simply আপনার কাছে বর্তমানে যা আছে তার সাথে আমরা এটি তৈরি করতে পারি:
<ul class="nav navbar-nav">
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "Index" ? "active" : "")">@Html.ActionLink("Home", "Index", "Home")</li>
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "About" ? "active" : "")">@Html.ActionLink("About", "About", "Home")</li>
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "Contact" ? "active" : "")">@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
এটি কোডে খুব সুন্দর নয়, তবে এটি কাজটি সম্পন্ন করবে এবং আপনি যদি চান তবে আপনার আংশিক দৃশ্যে আপনার মেনুটি বের করার অনুমতি দেবে। এটি আরও পরিচ্ছন্ন উপায়ে করার উপায় রয়েছে তবে আপনি যেহেতু সবে শুরু করছেন আমি এটিকেই ছেড়ে দেব। ভাগ্যক্রমে ASP.NET MVC শেখার!
দেরীতে সম্পাদনা:
এই প্রশ্নটি কিছুটা ট্র্যাফিকই পেয়েছে বলে মনে হচ্ছে আমি একটি HtmlHelper
এক্সটেনশন ব্যবহার করে আরও মার্জিত সমাধানে ফেলেছি ।
03-24-2015 সম্পাদনা করুন: নির্বাচিত আচরণকে ট্রিগারকারী একাধিক ক্রিয়া এবং নিয়ন্ত্রণকারীদের অনুমতি দেওয়ার জন্য এই পদ্ধতিটি পুনরায় লিখতে হয়েছিল, পাশাপাশি যখন শিশু অ্যাকশনটির আংশিক দৃষ্টিভঙ্গি থেকে পদ্ধতিটি আহ্বান করা হয়েছিল তখন পরিচালনা করার জন্য, ভাবছিলাম আমি আপডেটটি ভাগ করব!
public static string IsSelected(this HtmlHelper html, string controllers = "", string actions = "", string cssClass = "selected")
{
ViewContext viewContext = html.ViewContext;
bool isChildAction = viewContext.Controller.ControllerContext.IsChildAction;
if (isChildAction)
viewContext = html.ViewContext.ParentActionViewContext;
RouteValueDictionary routeValues = viewContext.RouteData.Values;
string currentAction = routeValues["action"].ToString();
string currentController = routeValues["controller"].ToString();
if (String.IsNullOrEmpty(actions))
actions = currentAction;
if (String.IsNullOrEmpty(controllers))
controllers = currentController;
string[] acceptedActions = actions.Trim().Split(',').Distinct().ToArray();
string[] acceptedControllers = controllers.Trim().Split(',').Distinct().ToArray();
return acceptedActions.Contains(currentAction) && acceptedControllers.Contains(currentController) ?
cssClass : String.Empty;
}
নেট কোর সহ কাজ করে:
public static string IsSelected(this IHtmlHelper htmlHelper, string controllers, string actions, string cssClass = "selected")
{
string currentAction = htmlHelper.ViewContext.RouteData.Values["action"] as string;
string currentController = htmlHelper.ViewContext.RouteData.Values["controller"] as string;
IEnumerable<string> acceptedActions = (actions ?? currentAction).Split(',');
IEnumerable<string> acceptedControllers = (controllers ?? currentController).Split(',');
return acceptedActions.Contains(currentAction) && acceptedControllers.Contains(currentController) ?
cssClass : String.Empty;
}
নমুনা ব্যবহার:
<ul>
<li class="@Html.IsSelected(actions: "Home", controllers: "Default")">
<a href="@Url.Action("Home", "Default")">Home</a>
</li>
<li class="@Html.IsSelected(actions: "List,Detail", controllers: "Default")">
<a href="@Url.Action("List", "Default")">List</a>
</li>
</ul>