0

我正在编写一个基本上接收许多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视图中等等。

原谅我发了这么长的帖子。

4

1 回答 1

0

您的 RouteValueDictionary 是否也包含控制器和操作的键?也许发布一些代码供我们查看?我会尝试类似的东西

var currentPath = Request.PathAndQuery;

循环遍历每个路由值字典 { var someString; 对于字典中的每个值 { 附加到某个字符串}

then check that string against currentPath
if true continue else create the link 
(not too efficient though)

}

于 2009-09-29T08:30:35.200 回答