- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为此-6ren">
我正在为我的应用程序编写一个帮助程序,它为给定的强类型 Controller /操作写出一个菜单项,如下所示:
<%= Html.MenuLink<WhateverController>(c => c.WhateverAction(), "Whatever") %>
作为此过程的一部分,如果当前页面和链接到的页面相同,我想将 active
类应用于输出的链接。我认为最好的方法是将当前请求的 RouteValueDictionary 内容与提供给辅助方法的表达式结果的内容进行比较。但是,我无法找出比较两个 RouteValueDictionary
中的项目是否相同的好方法。
有没有简单的方法可以做到这一点?我实际上想通过以下方式完成它:
public static string MenuLink<T>(this HtmlHelper html, Expression<Action<T>> action, string linkText) where T : Controller
{
// var link = html.ActionLink<T>(action, linkText, new {}); // Not important yet
var routeValues = Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<T>(action); // Might change?
var currentRouteVals = html.ViewContext.RouteData.Values;
bool isActivePage = /* are the contents of routeValues also
inside currentRouteValues? */
var tb = new TagBuilder("li");
// Continues...
}
我尝试使用内置比较(==),但它似乎使用默认的相等实现,因此返回 false,因为它们不是同一个实例。我还尝试过以下方法:
bool isActivePage = routeValues.All(x => currentRouteVals.ContainsValue(x));
但这也不起作用。我是不是完全找错了树?
最佳答案
呸,我先提出问题,然后再找出答案。我在这里发帖以防其他人遇到这个问题。我需要的行如下:
bool isActivePage = routeValues.All(x => x.Value.ToString() == (currentRouteVals[x.Key].ToString()));
原来它最初是将它们作为对象进行比较,而不是作为字符串进行比较。将它们转换为字符串可以按照人们所希望的方式对它们进行比较,现在一切都很好。
需要注意的是,应该围绕这样的方式进行比较。如果以另一种方式比较它们,RouteValueDictionary 可能包含您关心的内容以外的内容(例如“id”值)。或者至少我现在是这么理解的。进一步的实验可能需要我重新审视这个......
关于asp.net-mvc - 比较两个 RouteValueDictionary 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711262/
作为 this question 的后续,我正在尝试实现自定义路由约束,以便为特定路由动态修改 RouteValueDictionary。 我已经完成了 95%:我可以根据提供的参数模式匹配任何路由,
我有一个 MVC3 RouteValueDictionary,我想将其快速转换为匿名类型。 例如: new RouteValueDictionary(){{"action","search"}} 将与
我想知道是否有一种方法可以在给定虚拟路径的情况下返回与路径匹配的路由的参数名称和值的集合。我需要它来获取目标页面上 URL 的参数,而无需对正则表达式进行硬编码。 这是我猜 RouteTable.Ro
我知道我可以通过执行以下操作将 html 属性添加到我的标签中: var htmlAttributes = new RouteValueDictionary { { "data-foo", "bar"
我想查看 System.Web.Routing.RouteValueDictionary 类的源代码。但 Reflector 无法正确反汇编。 谢谢! 最佳答案 使用新的 .NET Reference
我正在创建一个可重用的方法来检查我的模型并自动构建 URL(通过 ActionLink)进行分页。我的模型的属性之一是 string[] (对于多选选择列表)这是完全有效的。 URL 的一个例子是:h
我想返回一个 RedirectToRouteResult将用户发送到如下所示的 URL: /MyController/MyAction/id?newid=3&newid=5&newid=7 newid
我想知道是否有一种优雅的方法可以将复杂类型的数组添加到 RouteValueDictionary 或兼容类型? 例如,如果我有一个类和一个 Action : public class TestObje
如果您有路线: routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _ New Wit
我有一个 RouteValueDictionary 附加到传递给 View 的对象。该对象包含一个名为 SelectedItems 的其他对象数组,用于用用户可以选择的复选框填充网格。由于此对象随后会
我正在使用 RouteValueDictionary 将 RouteValues 传递给 ActionLink: 如果我编码: 链接结果正常: SearchArticles?refSearch=2&
在编写 htmlhelper 扩展时,如果我想为我的 htmlhelper 扩展方法支持类似结构的构造函数,我使用 RouteValueDictionary如下: public static stri
我正在为我的应用程序编写一个帮助程序,它为给定的强类型 Controller /操作写出一个菜单项,如下所示: (c => c.WhateverAction(), "Whatever") %> 作为此
我正在使用 ASP.Net MVC 2,但遇到了一个小问题。我需要从值列表中生成一个 url。 使用以下代码: RouteValueDictionary dic = new RouteValueDic
这两段代码是一样的吗? RouteValueDictionary dic=new RouteValueDictionary(); dic.Add("controller", "Home"); dic.
每当我使用 t4Mvc 创建表单发布网址时,例如 它会生成如下所示的路由: 或者当我使用 该方法需要一个它生成的 Action 参数 其他人有这个问题吗? 最佳答案 我明白了,这是因为 T4M
在实现 WebApplication 时,我们在 RouteValueDictionary 中遇到了一个带有键“RouteModels”的可疑条目。 即使是 Google 也没有给我该条目的结果。有人
我需要从任意请求路径(与当前请求不相关)提取路由数据(Controller、Action等),例如/ 或 /account/manage。在以前版本的 Asp.Net Mvc 中,这可以像这样完成:
跨搜索结果页面保留表单帖子( View 模型)结果的最佳方法是什么? 我有一个包含复选框的搜索表单。此表单是使用 View 模型构建的,例如 public class SearchViewModel
我需要生成此网址:http://localhost:3178/Reports/?GroupId=1211&GroupId=1237 我正在尝试: var routeData = new RouteVa
我是一名优秀的程序员,十分优秀!