跳过或禁用ASP.NET MVC中当前路径的链接

时间:2009-09-29 08:07:28

标签: asp.net asp.net-mvc-routing html-helper actionlink

我正在编写一个帮助程序,基本上会收到很多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图标,等等。

请原谅我的长篇文章。

1 个答案:

答案 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)

}