我正在尝试从Html.ActionLink获取一个漂亮的URL,但我正在获取查询字符串版本。我有一个定义的路由,当我在浏览器的导航栏中输入值时会完美地工作,最终得到视图并按照我认为的控制器操作。
我的路线定义:
routes.MapPageRoute(
"WebFormDefault",
"",
"~/Login.aspx"
);
routes.MapRoute(
"MvcDefault",
"{controller}/{action}/{id}",
new {controller = "Foo", action = "Index", id = UrlParameter.Optional}
);
我的助手呼叫标记:
<ul>
<li>@Html.ActionLink("Foo Link", "FooAction", "Foo")</li>
</ul>
实际结果:
<a href="/?action=FooAction&controller=Foo">Foo Link</a>
我的期望:
<a href="/Foo/FooAction">Foo Link</a>
我确实尝试在当前的项目之外启动一个新项目,这是一个现有的应用程序,并看到了预期的结果。我已经手动将MVC添加到项目中,因为它最初是一个webforms应用程序。这是各种各样的杂交,我不确定这是否会导致问题。我使用nuget引入MVC程序集和依赖项,并根据VS中“New Project ...”模板的输出自行设置配置。我发现在我包含root命名空间之外的配置方面两者没有区别,所以我可以使用我之前存在的类型。但是,我不知道我还需要做些什么。但令人困惑的是,因为MVC在混合环境中表现得与我期望的完全一样。
答案 0 :(得分:1)
在webform路由之前添加mvc路由。希望这会奏效。
routes.MapRoute(
"MvcDefault",
"{controller}/{action}/{id}",
new {controller = "Foo", action = "Index", id = UrlParameter.Optional}
);
routes.MapPageRoute(
"WebFormDefault",
"",
"~/Login.aspx"
);
答案 1 :(得分:0)
//To get this : <a href="/Foo/FooActionMethodName">Foo Link Text</a>
//Your action link should be
<ul>
<li>@Html.ActionLink("Foo Link Text", "FooActionMethodName", "FooController")</li>
</ul>
//Your controller should be
public class FooController
{
publics ActionResult FooActionMethodName()
{
return View();
}
}