2009-09-29 20 views
0

我正在編寫一個基本上接收很多RouteValueDictionary的幫助程序,並返回很多鏈接;我想跳過指向當前路由值的鏈接(例如:/Products/Details/3不應該鏈接到/Products/Details/3),忽略其他URL參數(如果有)。在ASP.NET MVC中跳過或禁用指向當前路徑的鏈接

我能想到的是檢查:

  • 目的地行動和控制器的名稱爲空或等於爲當前的;

  • 每個其他目的地路由值被定義並等於當前值,反之亦然。

有沒有更好的方法?

編輯:

一些背景:我有很多車型,許多控制器,許多動作。我不喜歡在任何地方一遍又一遍地寫同樣的東西的想法,所以我決定編寫一個通用的解決方案:權限感知圖標鏈接(我要求提示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查看等等。

原諒我的長篇。

+0

我不知道爲什麼你會想這樣做?你會獲得什麼好處? – UpTheCreek 2009-09-29 08:11:23

+0

我正在顯示動作圖標(編輯,詳細信息,刪除等);我在每個頁面上都顯示了很多圖標,例如,我發現在詳細信息頁面中顯示「詳細信息」圖標是不合適的。 – giorgian 2009-09-29 08:25:36

回答

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) 

}

+0

現在,我看到您的評論我同意Sosh爲什麼要這樣做?因爲如果您在詳細信息視圖中,並且您想要操作編輯並刪除只顯示到詳細信息視圖中的代碼。你是否使用了所有操作的局部視圖?在這種情況下,您可以使用3個布爾InDetails,InEdit,InDelete製作視圖模型,並根據您在哪個視圖上隱藏該鏈接。 – 2009-09-29 08:35:04

+0

其實是的,'RouteValueDictionary'包含'action'和'controller'鍵,就像我這樣創建它們;我只是想編寫健壯的代碼。 – giorgian 2009-09-29 08:37:41

+0

您正在使用哪些視圖? – 2009-09-29 08:42:05