我有一个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 }
);
}
}
我不知道它是否重要,但我有一个管理员的MVC控制器 - 它叫做AdminController。我认为这可能会妨碍我将routeTemplate: "Admin/{controller}/{action}"
更改为routeTemplate: "Admin1/{controller}/{action}"
,但这没有任何区别。
以下是我看到的错误:
<!--
[HttpException]: A public action method 'user' was not found on controller 'MYPROJECT.Web.API.Controllers.AdminController'.
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/
吗? (如果没有其他原因,但组织)。
答案 0 :(得分:1)
如果您想更改URI,您应该注册新路线。转到WebApiConfig.cs
文件夹中的App_Start
。在这里您注册ApiControllers
的路线。在默认路由上添加以下路由:
config.Routes.MapHttpRoute(
name: "SpecifyYourRoutName", // optional
routeTemplate: "Admin/User/{action}",
defaults: new { controller = "User" }
);
现在,当您访问Admin/User/Create
时,您将点击Create()
User
控制器的方法。
如果您想在URI中传递一些数据,例如要删除的项目的id
,您只需编写:Admin/User/Delete?1
,这将调用Delete(int id)
User
控制器的方法并将1
作为id
传递给此方法。
如果您有其他类似URI的控制器您可以像这样定义您的路线:
config.Routes.MapHttpRoute(
name: "SpecifyYourRoutName", // optional
routeTemplate: "Admin/{controller}/{action}"
);
在这种情况下你可以查询像Admin / OtherControllerName / ActionOfThisController这样的URI吗?param1 = something1&amp; param2 = something2 ...