3

ASP.NET MVC 3 アプリがあります。ルートはある程度理解できますが、何かに行き詰まることがあります。現在、次のようなファイル構造があります。

/Controllers
  Child1Controller.cs
  Child2Controller.cs
  RootController.cs
/Views
  Index.cshtml
  Test.cshtml
  Child1
    Index.cshtml
    Item.cshtml
  Child2
    Index.cshtml
    Item.cshtml

Child1 と Child2 のビューから html を正常に取得できます。ブラウザで /Child1/Index または /Child2/Index にアクセスします。ただし、/Index を使用して、/Views ディレクトリにある Index.cshtml の内容を表示する方法がわかりません。どうやってそれを配線するのですか?

ありがとうございました!

4

2 に答える 2

3

ビューにアクセスするには、MVC のコントローラー/アクションに関連付ける必要があります。Child1/Index および Child2/Index の場合、Child1 および Child2 コントローラーに次のようなコードがあります。

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

質問しているビューについては、次の 2 つのいずれかを行うことができます。

1: ルート フォルダーを作成し、それらのビューをそのフォルダーに移動できます。ActionMethod からビューを返す場合、MVC は最初に Views フォルダーでコントローラーと同じ名前 (「ルート」) のフォルダーを探し、そこで ActionName に対応するビューを探します。そこで見つからない場合、MVC は Views/Shared フォルダーを探します。そこで見つからない場合は、エラーがスローされます。したがって、rootcontroller.cs ファイルで、次のアクション メソッドを作成します。

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

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

2: フォルダー構造をそのまま維持したい場合は、アクションが返すビューの場所を正確に指定できます (アクションと同じ名前ではないビューを返すために使用できます)。方法も)。rootcontroller.cs ファイルでこれらのアクション メソッドを変更して、そのアクションに対して返すビューの場所を指定します。

public ActionResult Index(){
        return View("~/Views/Index.cshtml");
    }

public ActionResult Test(){
        return View("~/Views/Test.cshtml);
    }

これらの方法は両方とも、デフォルト ルートを変更してデフォルト コントローラとして「ルート」を使用することを想定していることに注意してください。これは「ホーム」コントローラです。これら 2 つの方法のいずれかで、次の方法を使用できます。

www.yoursite.com -> Returns Root/Index
www.yoursite.com/Root/Test -> Returns Root/Test
www.yoursite.com/Root/Index -> Returns Root/Index
于 2012-10-03T02:41:01.690 に答える
1

既定のコントローラーにルーティングするだけ/Indexで、それはルート構成で指定されたインデックス アクションです (通常は Global.asax.cs にあります)。ただし、このデフォルト コントローラーの適切なアクションは、ViewResult を返します。これは、ビューを「コントローラーの」フォルダーで見つけようとします。したがって、デフォルトのコントローラーが RootController の場合、ビューは に配置する必要がありますRoot/Index。また、ビューは共有フォルダーで検索されますが、とにかくルート フォルダーでは検索されません。この順序を変更したい場合は、このリンクを試してください

于 2012-10-02T16:53:27.437 に答える