将MVC4添加到Webforms应用程序-路由不起作用
本文关键字:路由 不起作用 应用程序 Webforms MVC4 添加 | 更新日期: 2023-09-27 18:27:06
我正在尝试将MVC 4添加到现有的Web表单项目中。我遵循以下指南:https://www.packtpub.com/books/content/mixing-aspnet-webforms-and-aspnet-mvc
添加到web.config后:
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral,PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
我在Controllers文件夹中制作了一个控制器(HomeController.cs):
using System.Web.Mvc;
namespace MixingBothWorldsExample.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "This is ASP.NET MVC!";
return View();
}
}
}
然后我在Views/Home/index.aspx:上添加了我的视图
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="MixingBothWorldsExample.Views.Home.Index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<div>
<h1><%=Html.Encode(ViewData["Message"]) %></h1>
</div>
</body>
然后添加了我的路线:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}
public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.MapRoute("Test", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
出于某种原因,我现有的webforms项目中的一切都很好(包括PageRoutes),但/home/index给了我404,这意味着它甚至没有路由到控制器。
有人有什么想法吗?
最终,我把我现有的网站添加到MVC应用程序中,而不是反过来。当时路线安排得很好。
试试这个,
public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Test", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
我认为您可能需要向HomeController中的Index方法添加一个id参数。尽管这是可选的,但路由器正在寻找一种获取id的方法。
编辑:对不起,我不知道自己在想什么。正如你引用的文章所表明的那样,这是错误的。
你能试试下面的路由规则吗。这在MVC4项目中对我有效。这定义了当您导航到某个url和端口(如localhost:4897 )时将加载的默认页面
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 }
);
}