0

RouteValueDictionary基本的に多くのリンクを受け取り、多くのリンクを返すヘルパーを書いています。現在のルート値へのリンクをスキップしたいと思います (例: へ/Products/Details/3のリンクがあってはなりません/Products/Details/3)。他の URL パラメーターがあれば無視します。

私が考えることができるのは、次のことを確認することです。

  • 宛先アクションとコントローラー名が null または現在のものと等しい。

  • 相互の宛先ルート値が定義されており、現在の値と同じであり、その逆も同様です。

より良い方法はありますか?

編集:

いくつかのコンテキスト: 私は多くのモデル、多くのコントローラー、多くのアクションを持っています。どこでも同じことを何度も何度も書くという考えは好きではないので、一般的な解決策をコーディングすることにしました: パーミッションを意識したアイコン リンク (ここでヒントを求めました)。

これで、メソッド、URL を取得するためのデリゲート、その他いくつかのものを持つPermissionAwareIconActionクラスができました。内部では、いくつかのメソッドを呼び出して、このすべてのものを含む を次のようなコードで埋めます。IconHasPermission()Global.asax.csActionTable

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

このように、パーミッションは 1 つのクラスだけで定義されます。また、アクセス許可に基づいてリンクを表示または非表示にするコードは、ユーザーにアクションEditの表示を許可または禁止するコードと同じです。Edit

ほぼ完了です (完了したら、以前の質問への回答を投稿し、行ったことを再開する予定です)。

今、私はまだこの小さな作業をしなければなりません。ビュー内のアイコン、ビュー内のDetailsアイコンなどを避けてください。DetailsIndexIndex

長文失礼します。

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 に答える