如何控制或更改MVC4视图的URI

时间:2013-10-10 07:02:58

标签: asp.net-mvc asp.net-mvc-4 razor

我有一个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 &#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/吗? (如果没有其他原因,但组织)。

1 个答案:

答案 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 ...