Html.ActionLink表现不尽如人意

时间:2015-11-24 20:38:56

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我正在尝试从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&amp;controller=Foo">Foo Link</a>

我的期望:

<a href="/Foo/FooAction">Foo Link</a>

我确实尝试在当前的项目之外启动一个新项目,这是一个现有的应用程序,并看到了预期的结果。我已经手动将MVC添加到项目中,因为它最初是一个webforms应用程序。这是各种各样的杂交,我不确定这是否会导致问题。我使用nuget引入MVC程序集和依赖项,并根据VS中“New Project ...”模板的输出自行设置配置。我发现在我包含root命名空间之外的配置方面两者没有区别,所以我可以使用我之前存在的类型。但是,我不知道我还需要做些什么。但令人困惑的是,因为MVC在混合环境中表现得与我期望的完全一样。

2 个答案:

答案 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();
 }
}