【发布时间】:2014-10-21 08:54:38
【问题描述】:
我是 MVC 的新手。我可以将 MVC 5.2 集成到我现有的 Web 表单 Visual Studio 2012 Update 4 项目中。我创建了我的第一个控制器,一切都按预期工作。在访问 MVC 视图时,即使我能够利用现有项目中的 Windows 窗体身份验证。但是当创建我的第二个控制器时,它开始搞砸了。
这是我的路线图:
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 }
);
}
}
我有两个控制器都位于 ~/Controllers 中。我的第一个控制器是:
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 开始网址是
http://localhost/Fortia/CajaWeb.
Fortia 是我的应用名称。因为我声明了 Web Forms 身份验证和
<location path="CajaWeb">
<system.web>
<authorization>
<allow roles="Fortia" />
<deny users="*" />
</authorization>
</system.web>
</location>
当开始调试旧的 WebForms 应用程序身份验证机制时,会调用旧的 WebForms 登录页面,并在成功登录后最终调用我的 CajaWebController,Index() 操作。在创建 CajaWebController 之前,调用的是 HomeController,但我假设 MVC 现在推断出正确的控制器是 CajaWeb,因为目标 url 是
http://localhost/Fortia/CajaWeb.
调用的视图包含以下代码:
<a href='@Url.Action("CloseSession", "CajaWeb")'>Close session</a>
问题是当单击生成的链接时,尽管我在 @Url.Action 中明确设置了 CajaWebController.CloseSession(),但 MVC 会调用 HomeController.Index() 操作...
我查看了生成的链接,它看起来不对:
<a href='/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb'>
它将参数分隔符 & 编码为 & 但无论如何我尝试将 href 手动编码为
http://localhost/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb
但结果是一样的。
怎么了?
【问题讨论】:
-
与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
-
也许您似乎用于 WebForms 的包 ASP.NET Friendly URLs 不能很好地与 MVC 配合使用?
-
新证据! 此代码有效:
@Html.RouteLink("Link text to display on page", "Default", new System.Web.Routing.RouteValueDictionary(new { controller = "CajaWeb", action = "CloseSession", foo = "A", bar = "B" }));那么为什么其他代码无效? -
可能是@CodeCaster 在正确的路径中。
@Html.RouteLink生成<a href="/Fortia/CajaWeb/CloseSession?foo=A&amp;bar=B">,没有“友好 url”...
标签: c# asp.net asp.net-mvc visual-studio-2012 asp.net-mvc-5