sam*_*bar 6 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)
{
routes.EnableFriendlyUrls();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个控制器都位于〜/ 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");
}
}
Run Code Online (Sandbox Code Playgroud)
第二个控制器:
public class CajaWebController : Controller
{
//
// GET: /CajaWeb/
public ActionResult Index()
{
return View();
}
public ActionResult CloseSession()
{
return Redirect("http://www.cnn.com");
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道它与问题有关,但我将包括如何达到MVC视图.我的VS2012启动网址是
http://localhost/Fortia/CajaWeb.
Run Code Online (Sandbox Code Playgroud)
Fortia是我的应用名称.因为我声明了Web Forms身份验证和
<location path="CajaWeb">
<system.web>
<authorization>
<allow roles="Fortia" />
<deny users="*" />
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
当开始调试时,调用旧的WebForms应用程序身份验证机制,调用旧的WebForms登录页面,并在成功登录后最终调用我的CajaWebController,Index()动作.在创建CajaWebController之前,它是被调用的HomeController,但我认为MVC现在推断出正确的控制器是CajaWeb,因为目标url是
http://localhost/Fortia/CajaWeb.
Run Code Online (Sandbox Code Playgroud)
调用的视图包含以下代码:
<a href='@Url.Action("CloseSession", "CajaWeb")'>Close session</a>
Run Code Online (Sandbox Code Playgroud)
问题是当单击生成的链接时,MVC调用HomeController.Index()操作,尽管我在@ Url.Action中明确设置了CajaWebController.CloseSession()...
我查看了生成的链接,看起来不对劲:
<a href='/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb'>
Run Code Online (Sandbox Code Playgroud)
它编码参数分隔符并进入&但无论如何我尝试将href手动编码为
http://localhost/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.
怎么了?
您正在使用的ASP.NET 友好 URL 包似乎干扰了 MVC 生成的 url。无论如何,这个库似乎是为 WebForms 设计的
如果没有它也可以工作,那么就保持原样,因为当控制器和操作名称对其内容有意义时,MVC 的 url 已经非常适合 SEO。
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |