【问题标题】:Routing issues MVC路由问题 MVC
【发布时间】:2014-09-18 10:20:41
【问题描述】:

我正在学习MVC,目前正在研究路由。

我有以下问题:这是我的 RegisterRoutes 方法:

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

    routes.MapRoute("Customer", "{controller}/{action}/{objCustomer}",
            new {controller = "Customer", action = "CreateCustomer", id = UrlParameter.Optional});
}

如果我运行我的应用程序,hxxp://localhost:12454/ 是否应该在 CustomerController 中不显示 CreateCustomer 操作调用的视图,换句话说,URL 应该是这样的? hxxp://localhost:12454/Customer/CreateCustomer

注意:我将 http 替换为 hxxp,而不是尝试创建链接

我在这里没有正确理解什么?

这是我的整个 Global.asax.cs 课程。

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }

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

        routes.MapRoute("Customer", "{controller}/{action}",
              new { controller = "Customer", action = "CreateCustomer", UrlParameter.Optional});
    }
}

这是我的客户控制器:

public class CustomerController : Controller
{
    // GET: Customer
    public ActionResult ShowCustomer(Customer objCustomer)
    {
        return View(objCustomer);
    }

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

【问题讨论】:

  • 只需检查您的路线中是否有额外的, UrlParameter.Optional
  • 确保这条路线高于所有其他路线
  • 你的意思是这条路线应该高于所有其他路线?我只定义了这一条路线。
  • 我在 Model 文件夹中还有一个名为 Customer 的模型。这会导致任何问题吗?
  • 我不这么认为..试试吧..我的意思是说从 global.asax 文件中删除此路由并将其粘贴到 appstart 中 routeconfig.cs 文件中的默认路由上方文件夹。

标签: c# asp.net-mvc asp.net-mvc-routing url-routing


【解决方案1】:

您在路由中使用objCustomer 而不是'id',那么您必须指定objCustomer 作为可选路由参数。

如下图修改路由:

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

  routes.MapRoute("Customer", "{controller}/{action}/{objCustomer}",
        new {controller = "Customer", action = "CreateCustomer", objCustomer = UrlParameter.Optional});
}

在 AppStart 文件夹中的 routeconfig.cs 文件中创建所有自定义路由,不要忘记将此自定义路由放在默认路由之上。

【讨论】:

  • @akemp..确保您在控制器文件夹中有一个带有 createcustomer 操作的 Customer 控制器,并且为了测试在 createcustomer 操作上放置一个断点,看看它是否会出现
  • 我的 CreateCustomer 网络没有任何参数,我认为这是问题所在。但是如何更改 MapRoute() 以在默认 url 中不包含任何参数?例如,我现在有以下内容,但不起作用: routes.MapRoute("Customer", "{controller}/{action}", new { controller = "Customer", action = "CreateCustomer" });跨度>
  • @akemp..你展示的路线应该可以工作..看看其他地方肯定有问题,如我的回答所示objCustomer是可选的,你可以给objCustomer一些价值或不给它不会造成任何问题。
  • 我没有看到任何可能出错的地方。我现在要更新我的问题,并发布我的整个 Global.asax.cs,然后你就可以看到
  • @akemp..也发布控制器操作
猜你喜欢
  • 2011-07-31
  • 2016-11-09
  • 2013-11-13
相关资源
最近更新 更多