【发布时间】:2009-09-29 08:07:28
【问题描述】:
我正在编写一个助手,它基本上接收许多RouteValueDictionary 并返回许多链接;我想跳过指向当前路由值的链接(例如:在/Products/Details/3 中不应有指向/Products/Details/3 的链接),如果有的话,忽略其他 URL 参数。
我能想到的是检查是否:
目标动作和控制器名称为空或等于当前;
每个其他目的地路由值都已定义且等于当前值,反之亦然。
有没有更好的办法?
编辑:
一些背景:我有很多模型、很多控制器、很多动作。我不喜欢到处一遍又一遍地写同样的东西,所以我决定编写一个通用的解决方案:权限感知图标链接(我要求提示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 图标等等。
请原谅我写了这么长的帖子。
【问题讨论】:
-
我想知道您为什么要这样做?您将获得什么好处?
-
我正在显示操作图标(编辑、详细信息、删除等);我在每个页面上显示了许多图标,例如,我发现在详细信息页面中显示“详细信息”图标是不合适的。
标签: asp.net asp.net-mvc-routing html-helper actionlink