HTML.ActionLink查询字符串参数未传递给方法

时间:2013-08-19 19:08:52

标签: asp.net-mvc-4 razor

检查一些代码,不明白为什么会失败。主控制器的索引方法如下所示:

public ActionResult Index(int appEventId = -1)

通常没有查询字符串参数,但偶尔需要路由到主页并将特定ID传递给自动显示。默认值-1表示它应该正常显示。这通常很好。

在另一个页面中,这个剃刀代码生成一个有效的超链接:

@Html.ActionLink("Back to Main", "Index", "MainController", new { appEventId = -9 }, new { }) // certain things renamed to protect the innocent!

在本地测试时,这就像一个魅力。控制器Index方法将-9检测为特定值,并针对该特定情况执行某些操作。

但是,当部署在Web服务器上时,应用程序位于子文件夹中,而不是根目录。大多数情况下它工作正常,但在上面的例子中,它生成这样的URL:

http://server/appSubFolder/?appEventId=-9

上面的URL看起来是正确的,但控制器的Index方法没有传递-9。

MVC应用程序无法部署到子文件夹有一些限制吗?我不是那种决定以这种方式部署它的人,我只是想弄清楚错误。

1 个答案:

答案 0 :(得分:0)

好吧,我仍然认为这是MVC的一个错误,或者至少应该更清楚一点,以这种方式设置网站不是最好的做法。

但是,对于任何可能感兴趣的人,我通过用以下内容替换@ Html.ActionLink解决了这个问题:

<a href='@Url.Content("~/Controller/Index?appEventId=-9")'>Back To Main</a>

当它是主控制器的Index方法时,这可以避免将url的/ Controller / Method样式简化为“/”,从而正确解析查询字符串并将其传递给Index()方法。