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

Asp.net mvc 4 HTML.ActionLink查询字符串参数未传递给方法,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,检查一些代码,不知道为什么会失败。主控制器的索引方法如下所示: public ActionResult Index(int appEventId = -1) http://server/appSubFolder/?appEventId=-9 通常没有querystring参数,但偶尔需要路由到主页并将特定ID传递给auto display。默认值-1表示它应该正常显示。这工作正常 在另一个页面中,此razor代码生成有效的超链接: @Html.ActionLink("Back to Main

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

public ActionResult Index(int appEventId = -1)
http://server/appSubFolder/?appEventId=-9
通常没有querystring参数,但偶尔需要路由到主页并将特定ID传递给auto display。默认值-1表示它应该正常显示。这工作正常

在另一个页面中,此razor代码生成有效的超链接:

@Html.ActionLink("Back to Main", "Index", "MainController", new { appEventId = -9 }, new { }) // certain things renamed to protect the innocent!
在本地测试时,这就像一个符咒。控制器索引方法将-9检测为特定值,并针对特定情况执行某些操作

但是,当部署在web服务器上时,应用程序位于子文件夹中,而不是根文件夹中。大多数情况下,它工作正常,但在上述情况下,它会生成如下url:

public ActionResult Index(int appEventId = -1)
http://server/appSubFolder/?appEventId=-9
上面的URL看起来是正确的,但是控制器的索引方法没有传递-9


MVC应用程序不能部署到子文件夹是否存在一些限制?我不是决定以这种方式部署它的人,我只是想弄清楚错误所在。

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

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

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


这避免了在作为主控制器的索引方法时将url的/Controller/Method样式缩短为“/”,从而正确解析查询字符串并将其传递给Index()方法。

是否使用IIS作为web服务器?应该能够告诉它/配置它使用子文件夹作为应用程序的根目录。已经提出了这个问题,但涉及到一些繁文缛节。同时,这应该是可行的,是吗?