【问题标题】:skip or disable links to current path in ASP.NET MVC在 ASP.NET MVC 中跳过或禁用指向当前路径的链接
【发布时间】: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


【解决方案1】:

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

var currentPath = Request.PathAndQuery;

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

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

}

【讨论】:

  • 现在我看到你的评论我同意 Sosh 你为什么要这样做?因为如果您在详细信息视图中并且您想要编辑和删除操作,只需将代码写入详细信息视图。您是否对所有操作都使用局部视图?在这种情况下,您可以使用 3 个布尔值 InDetails、InEdit、InDelete 制作视图模型,并根据您所在的视图隐藏该链接。
  • 实际上是的,RouteValueDictionary 包含 actioncontroller 键,因为我是这样创建它们的;我只是想编写健壮的代码。
  • 所以在供应商的详细信息视图中,您仍然只想编辑和删除,而不是详细信息吗?如果是这样,那么我只需将 () %> 更改为 ("LINKTOEXCLUDEHERE") %> 并在 IconActionLinks 方法中生成除 LINKTOEXCLUDE 之外的所有内容的链接.大写的 Soz
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2015-04-02
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多