0

asp.net mvc3 で子アクションを削除するにはどうすればよいですか。私は部分的なビューとメインのビューを持っていることを意味します。子ページに入ったときの URL バーでは、ロードされません。

私のメインページが

ローカルホスト:5820/ホーム/インデックス

それから私が入るとき

ローカルホスト:5820/ホーム/インデックス

それはうまくいくはずで、子アイテムは

ローカルホスト:5820/ホーム/について

それから私が入るとき

ローカルホスト:5820/ホーム/について

開いてはいけません。どうすればasp.net mvcでそれを行うことができますか. そのようなページがいくつかあり、この問題を修正する方法でページを表示しました

4

2 に答える 2

1

ChildActionOnly属性を探しているようです:

[ChildActionOnly]
public ActionResult About()
{
    return View();
}

への直接呼び出しを無効にしますlocalhost:5820/Home/About- 部分ビューとしてのレンダリングのみが利用可能になります。

必要に応じて更新ChildActionOnly-属性を持つ部分ビューを返す必要があるすべてのアクションをマークします。

public ActionResult Index()
{
    return View();
}

[ChildActionOnly]
public ActionResult About()
{
    var model = ...
    return PartialView("_About", model);
}

そしてインデックスビューで、これらのアクションを(Homeコントローラーおよび他のコントローラーから)次の方法で呼び出します。

@Html.Action("About", "Home")
于 2012-12-08T10:56:27.000 に答える
0

ABOUTページがHOMEページ内のリンクであるという事実は、それが子アクションであることを意味するものではありません。実際、MVCの観点からは、それらは同じレベルにあり、階層の幻想を与えるプログラマーとしてのあなたです。ナビゲーションの順序を提供することによって。

今、あなたができることは次のとおりです。

  1. コントローラからアクション メソッドを削除するか、または

  2. 次のような単純な無視ルートを記述します。

    routes.IgnoreRoute("YourRuleToIgnoreActions");

このルールは、他のルールがトリガーされるのを避けるために、RegisterRoutes の RegisterRoutes メソッドの先頭にある必要があります。

無視ルールを構築するために、このトピックに関する素晴らしい議論があります: http://ardalis.com/IgnoreRoute-in-ASP.NET-Routing-is-Order-Dependent

更新:おそらくこれについて考えすぎですが、私の意見では、モデルはビューの動作を変更するプロパティを持つことができます。これは、アーキテクチャの観点から、すでにビューにいる場合、あなたの懸念は排他的であるためです。プレゼンテーション層で、次のようなものを持つことは完全に有効だと思います:

 public class MyReportsModel{
     public bool displaySection1 { get; set;}
    //other data
 }

ビューでは、次の方法でプレゼンテーションを変更できます。

  @{
   if(@Model.displaySection1){
        //display as normal
    }

}

もちろん、モデルにデータを入力するときは、必要に応じて各コントローラーでそのプロパティを設定する必要があります。

  MyReporstModel thisView = new MyReportsModel();
  thisView.displaySection1 = true;
   // set all properties necessary to display

   // if the controller knows that this partial view won't be displayed then 
    thisView.displaySection1 = false;

しかし、それはもはや技術的な問題ではなく、アーキテクチャ上の問題です。

それが役に立てば幸い、

于 2012-12-08T10:11:05.103 に答える