2013-08-19 128 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()方法。

相關問題