2013-08-19 167 views
0

检查一些代码,不明白为什么会失败。主控制器的指数方法是这样的:HTML.ActionLink查询字符串参数未传递给方法

public ActionResult Index(int appEventId = -1) 

通常有没有查询字符串PARAM,但偶尔也有一个需要路由到主页面,并通过特定的ID自动显示。默认值-1表示它应该正常显示。这通常工作正常。

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

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

测试时在本地这个工程就像一个魅力。控制器的Index方法检测到-9作为一个特定的值,并为特定情况做一些事情。

但是,当部署在Web服务器上时,应用程序位于子文件夹中,而不是根目录。主要是它工作正常,但在上述情况下,它会产生这样的网址:

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

和上面的URL看起来正确,但是控制器的指数方法不是通过-9。

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

+0

您是否使用IIS作为Web服务器?应该能够告诉它/将其配置为使用子文件夹作为应用程序的根目录。 – asymptoticFault

+0

已经提出这一点,但有一些繁琐的手续。同时,这应该工作,是吗? – jrichview

回答

0

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

但是,任何人谁可能有兴趣,我工作围绕这一问题通过以下替换@ Html.ActionLink:

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

这避免缩短URL的/控制器/法风格只是“ /“,当它是主控制器的Index方法时,因此查询字符串被正确解析并传递给Index()方法。

相关问题