C# ASP.Net MVC@Url.Action()路由到错误的控制器
我是MVC的新手。我可以将MVC 5.2集成到现有的web窗体Visual Studio 2012 Update 4项目中。我创建了我的第一个控制器,所有这些都按预期工作。甚至在访问MVC视图时,我也能够利用现有项目中的windows窗体身份验证。但当我创建第二个控制器时,它开始出错 这是我的路线图:C# ASP.Net MVC@Url.Action()路由到错误的控制器,c#,asp.net,asp.net-mvc,visual-studio-2012,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Visual Studio 2012,Asp.net Mvc 5,我是MVC的新手。我可以将MVC 5.2集成到现有的web窗体Visual Studio 2012 Update 4项目中。我创建了我的第一个控制器,所有这些都按预期工作。甚至在访问MVC视图时,我也能够利用现有项目中的windows窗体身份验证。但当我创建第二个控制器时,它开始出错 这是我的路线图: public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes)
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.EnableFriendlyUrls();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我有两个控制器都位于~/控制器中。我的第一个控制器是:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
//return View();
return Redirect("~/Default.aspx");
}
public ActionResult CloseSession()
{
return Redirect("http://www.yahoo.com");
}
}
第二控制器:
public class CajaWebController : Controller
{
//
// GET: /CajaWeb/
public ActionResult Index()
{
return View();
}
public ActionResult CloseSession()
{
return Redirect("http://www.cnn.com");
}
}
我不知道这是否与问题有关,但我将介绍如何达到MVC视图。我的VS2012开始url是
http://localhost/Fortia/CajaWeb.
Fortia是我的应用程序名。因为我声明了Web表单身份验证和
<location path="CajaWeb">
<system.web>
<authorization>
<allow roles="Fortia" />
<deny users="*" />
</authorization>
</system.web>
</location>
调用的视图包含以下代码:
<a href='@Url.Action("CloseSession", "CajaWeb")'>Close session</a>
但结果是一样的
怎么了?我想问题是路线不对
http://localhost/Fortia/CajaWeb
不匹配任何路由,因此它最终将转到RouteConfig中指定的默认路由。您需要在应用程序中配置路由或创建一个名为“Fortia”的区域。您使用的似乎正在干扰MVC生成的URL
如果没有,那么就这样吧,因为当控制器和动作名称对其内容有意义时,MVC的URL已经非常SEO友好了 与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“.也许您似乎用于WebForms的软件包与MVC不兼容?新证据!此代码有效:
@Html.RouteLink(“要在页面上显示的链接文本”,“默认”,NEW System.Web.Routing.RouteValueDictionary(NEW{controller=“CajaWeb”,action=“CloseSession”,foo=“A”,bar=“B”}))
那么为什么其他人没有呢?可能是@CodeCaster的路径正确。@Html.RouteLink
生成了
,没有“友好的URL”“…我无法卸载友好URL包,因为我正在更新的应用程序是WebForms,并且严重依赖于此包。我只是想给它添加MVC支持。因此,我将看看如何适应它。但这将是另一个问题
<a href='@Url.Action("CloseSession", "CajaWeb")'>Close session</a>
<a href='/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb'>
http://localhost/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb