我正在编写一个帮助程序,基本上会收到很多RouteValueDictionary
并返回许多链接;我想跳过指向当前路由值的链接(例如:在/Products/Details/3
中不应该有/Products/Details/3
的链接),忽略其他URL参数(如果有的话)。
我能想到的是检查是否:
目标操作和控制器名称为null或等于当前操作;
定义了每个其他目的地路线值,并且等于当前路线值,反之亦然。
有更好的方法吗?
修改
一些背景:我有很多模型,很多控制器,很多动作。我不喜欢在所有地方反复编写相同内容的想法,所以我决定编写一个通用的解决方案:权限感知图标链接(我要求提示here)。
我现在有一个PermissionAwareIconAction
类,它有一个Icon
,一个HasPermission()
方法,一个获取URL的委托和其他一些东西。在Global.asax.cs
内部,我调用了几个方法来填充ActionTable
,其中包含所有这些内容,代码如下:
CrudAction.CreateCrudActions<Vendors>(Permissions.CreateVendors,
Permissions.EditVendors,
Permissions.DetailsVendors,
Permissions.DeleteVendors);
,当然还有添加其他特定操作的代码。
我还用以下方法装饰我的控制器动作:
[Action(typeof(Vendors), "Create")]
public ActionResult Create()
{
...
}
在内部视图中,我这样做:
<%= Html.IconActionLinks<Vendors>() %>
在与单个对象无关的视图中,例如Index
和
<%= Html.IconActionLinks<Vendors>(Model) %>
在与对象相关的视图中,例如Details
。
这样,权限只在一个类中定义;此外,根据权限显示或不显示指向Edit
的链接的代码与允许或不允许用户查看Edit
操作的代码相同。
我差不多完成了(我打算回复上一个问题,恢复我已完成的工作,当我完成时)。
现在我还要做这件小事,避免Details
视图中的Details
图标,Index
视图中的Index
图标,等等。
请原谅我的长篇文章。
答案 0 :(得分:0)
您的RouteValueDictionary是否也包含控制器和操作的键?也许发布一些代码给我们看?我会尝试像
这样的东西var currentPath = Request.PathAndQuery;
遍历每个routevalue字典 { var someString; 对于字典中的每个值 { 附加一些字符串 }
then check that string against currentPath
if true continue else create the link
(not too efficient though)
}