1

最初のAsp.NetMVC2サイトを構築していますが、現在、サイトに/Admin領域を追加しようとしています。

この領域をメインのユーザーセットに表示したくないので、http:// Intranet/Adminと入力した場合にのみアクセスできます。

私が持っているのは通常のユーザー用のNewsControllerですが、Admin NewsControllerも必要であり、ビューを追加したときに正しい場所に配置されるようにクラス階層とフォルダーを設定する方法がわかりません。

Global.Asax.cs内に追加しましたが、ルートは正しく解決されます。

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new string[] { "Intranet.Controllers" } 
);

routes.MapRoute(
    "Admin", // Route name
    "Admin/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
      new string[] { "Intranet.Controllers.Admin" } 
);

そして、私が設定したフォルダ階層で

Views/
     Admin/
     News/
         ...I want the new view to go here...

コントローラーで

Controllers/
    Admin/
        AdminController.cs
        NewsController.cs (this is the one i want for administration)
    NewsController.cs (this is the regular one for viewing the list, specific item etc)

私が直面している問題は、インデックスのadmin / NewsController.csにアクセスしてビューを追加すると、/ Admin / News/Index.aspxではなく/News/Index.aspxに作成しようとすることです。

これは私の管理者ニュースコントローラーのコードですコントローラー/管理者->追加->コントローラー

namespace Intranet.Controllers.Admin
{
    public class NewsController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

間違っていることはありますか、またはビューを追加するときに/ Admin/{area}ディレクトリに作成されるように何を変更する必要がありますか。

4

2 に答える 2

1

MVC2を使用しているため、これを解決する最も簡単な方法は、管理セクション用に実際のMVC「エリア」を作成することです。現在、デフォルトのセクションですべてを実行しており、管理フォルダーを使用しているだけです。管理エリア(既知の場所Areasの下)フォルダーを作成すると、AdminAreaRegistrationが作成されます。ここで管理ルートを構成します。これはエリアの一部として行うため、URL「/Admin」の最初のセグメントが「エリア」トークンに使用されます。これにより、使用するコントローラーが明確になり、必要なコントローラーが正しく選択されます。したがって、フォルダ構造は次のようになります。

/Areas
    /Admin
        /Controllers
            NewsController.cs
etc.
于 2010-10-07T02:29:28.500 に答える
0

既存のコントローラーアクションのビューを作成しようとすると、常にビューのルートフォルダーに作成されます。ビューのデフォルトルートは、常にビューフォルダのルートを指します。

例えば:

 Controllers
     Admin
         AdminController.cs
         HomeController.cs
     HomeController.cs

その階層では、Admin内のHomeControllerとrootの両方がViewsフォルダー内の同じビューを共有します。

Views
    Home
        Index.aspx

コントローラの管理フォルダ内のHomeControllerのすべてのActionResultsで指定されたView()を返さない限り。特定のビューにマップされます。

例、ControllersのAdminフォルダーのHomeController.cs内のActionResult。

namespace Intranet.Controllers.Admin
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View("Home/Index");
        } 
    }
}

これは、次のようにViewsフォルダーにマップされます

Views
    Admin
        Home
            Index.aspx

ただし、ActionResultでビューを返すときにビューパスを指定しない場合は、次のようなビューのデフォルトの場所にマップされます。

Views
    Home
        Index.aspx

これは、Global.asaxでルートを指定した場合でも、Viewsフォルダーではなく、URLが指すコントローラーにのみマップするためです。

右クリックしてコントローラーのサブレベルのActionResultにビューを作成すると、常にビューフォルダーのルートに対応するコントローラーが作成されます。

于 2010-10-07T02:28:34.943 に答える