检查一些代码,不明白为什么会失败。主控制器的索引方法如下所示:
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应用程序无法部署到子文件夹有一些限制吗?我不是那种决定以这种方式部署它的人,我只是想弄清楚错误。
答案 0 :(得分:0)
好吧,我仍然认为这是MVC的一个错误,或者至少应该更清楚一点,以这种方式设置网站不是最好的做法。
但是,对于任何可能感兴趣的人,我通过用以下内容替换@ Html.ActionLink解决了这个问题:
<a href='@Url.Content("~/Controller/Index?appEventId=-9")'>Back To Main</a>
当它是主控制器的Index方法时,这可以避免将url的/ Controller / Method样式简化为“/”,从而正确解析查询字符串并将其传递给Index()方法。