1

我有一个 MVC4 Web API 应用程序。我将所有 APIController 类放在 Controllers/API 下,现在我在 Controllers/ 文件夹中创建 MVC Controller 类。

我添加了一个名为 UserController 的控制器,使用 EntityFramework 指定带有视图的读/写。这会自动在 /Views 下生成一个名为 Users 的文件夹。它包含 Create.cshtml、Delete.cshtml、Index.cshtml 等文件。

问题是我希望这个用户视图的 URI 是 /Admin/User/

我是否错过了指定在 Admin/ 文件夹下创建视图的机会?我尝试将整个文件夹复制到我想要的位置,但无法以这种方式访问​​。我删除了控制器和视图,然后重新创建了控制器,但我没有看到我可以设置的任何地方,这会导致在 Admin/下创建视图。

如何创建 MVC 控制器,并在特定 Views 文件夹下自动生成 CRUD 页面?

- 更新 -

我添加了 Admin/ 的路由。这是我的 RouteConfig.cs:

public class RouteConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "Administration",
            routeTemplate: "Admin/{controller}/{action}"
        ); 
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

我不知道这是否重要,但我有一个用于 Admin 的 MVC 控制器 - 它称为 AdminController。考虑到它可能会妨碍我,我改为routeTemplate: "Admin/{controller}/{action}"routeTemplate: "Admin1/{controller}/{action}"但它没有任何区别。

这是我看到的错误:

<!--  
[HttpException]: A public action method &#39;user&#39; was not found on controller &#39;MYPROJECT.Web.API.Controllers.AdminController&#39;.
   at System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
   at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
 -->

自动生成 CRUD 页面后,会创建一个新文件夹,其中包含 .cshtml 文件。除了,它是在/Views/User/. 我可以移动(在 VS 中拖放)这个 /User/ 文件夹以便它位于/Views/Admin/User/吗?(如果没有其他原因,只是为了组织)。

4

1 回答 1

1

如果你想改变 URI 你应该注册新的路由。进入文件夹WebApiConfig.csApp_Start在这里您为ApiControllers. 在默认路由上方添加以下路由:

config.Routes.MapHttpRoute(
    name: "SpecifyYourRoutName", // optional
    routeTemplate: "Admin/User/{action}",
    defaults: new { controller = "User" }
);

现在,当您访问时,Admin/User/Create您将点击控制器的Create()方法。 如果您想在 URI 中传递一些数据,例如要删除的项目,您只需编写:这将调用控制器的方法并传递给该方法。 User
idAdmin/User/Delete?1Delete(int id)User1id

如果您将拥有其他具有类似 URI 的控制器,您可以像这样定义您的路由:

config.Routes.MapHttpRoute(
    name: "SpecifyYourRoutName", // optional
    routeTemplate: "Admin/{controller}/{action}"
);

在这种情况下,您可以查询类似 Admin/OtherControllerName/ActionOfThisController?param1=something1¶m2=something2...

于 2013-10-10T07:41:25.187 回答