0

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

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 应用程序部署到子文件夹的限制?我不是决定以这种方式部署它的人,我只是想弄清楚这个错误。

4

1 回答 1

0

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

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

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

当它是主控制器的 Index 方法时,这避免了将 url 的 /Controller/Method 样式缩短为仅“/”,因此查询字符串被正确解析并传递给 Index() 方法。

于 2013-08-20T13:38:09.737 回答