我正在编写一个基本上接收许多RouteValueDictionary
并返回许多链接的助手;我想跳过指向当前路由值的链接(例如:/Products/Details/3
不应该有指向 的链接/Products/Details/3
),忽略其他 URL 参数(如果有)。
我能想到的是检查是否:
目标动作和控制器名称为空或等于当前;
每个其他目标路由值都已定义并等于当前值,反之亦然。
有没有更好的办法?
编辑:
一些背景:我有很多模型,很多控制器,很多动作。我不喜欢到处一遍又一遍地写同样的东西,所以我决定编写一个通用的解决方案:权限感知图标链接(我在这里寻求提示)。
我现在有一个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
视图中等等。
原谅我发了这么长的帖子。