RouteValueDictionary
基本的に多くのリンクを受け取り、多くのリンクを返すヘルパーを書いています。現在のルート値へのリンクをスキップしたいと思います (例: へ/Products/Details/3
のリンクがあってはなりません/Products/Details/3
)。他の URL パラメーターがあれば無視します。
私が考えることができるのは、次のことを確認することです。
宛先アクションとコントローラー名が null または現在のものと等しい。
相互の宛先ルート値が定義されており、現在の値と同じであり、その逆も同様です。
より良い方法はありますか?
編集:
いくつかのコンテキスト: 私は多くのモデル、多くのコントローラー、多くのアクションを持っています。どこでも同じことを何度も何度も書くという考えは好きではないので、一般的な解決策をコーディングすることにしました: パーミッションを意識したアイコン リンク (ここでヒントを求めました)。
これで、メソッド、URL を取得するためのデリゲート、その他いくつかのものを持つPermissionAwareIconAction
クラスができました。内部では、いくつかのメソッドを呼び出して、このすべてのものを含む を次のようなコードで埋めます。Icon
HasPermission()
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
。
このように、パーミッションは 1 つのクラスだけで定義されます。また、アクセス許可に基づいてリンクを表示または非表示にするコードは、ユーザーにアクションEdit
の表示を許可または禁止するコードと同じです。Edit
ほぼ完了です (完了したら、以前の質問への回答を投稿し、行ったことを再開する予定です)。
今、私はまだこの小さな作業をしなければなりません。ビュー内のアイコン、ビュー内のDetails
アイコンなどを避けてください。Details
Index
Index
長文失礼します。