2011-05-30 33 views
0

我有一個控制器有兩個操作,每個操作都在設置給定參數後返回來自Index操作的響應。MVC應用程序返回404僅用於服務器上的控制器操作

public ActionResult Index(int? pageType) 
{ 
    // Do something based on the pageType 
    return View(); 
} 

public ActionResult Guides() 
{ 
    return Index(1); 
} 

public ActionResult Discussions() 
{ 
    return Index(2); 
} 

我之所以這樣做是爲了使網址有點清潔不搞亂太多具有路由(設置路徑接受頁面類型爲字符串參數會混淆與映射的東西到控制器的動作,和我想要的網址顯示頁面類型)

只是爲了混淆事情,我動態檢查基於pageType參數的匹配視圖,並使用它,否則我堅持默認的'索引'視圖。我正在使用標準路線映射來解決這個問題。

往往是這樣,這一切都奇蹟般地在當地工作。訪問Web服務器上的Url時出現問題。當我導航到「指南」操作時,它一切正常,但導航到「討論」操作會返回404。奇怪的是,在服務器本身的瀏覽器中訪問同一個Url本身工作正常!

它在Windows Server 2008 R2(IIS7)上運行,應用程序池設置爲「集成」。它也是.net 4上的MVC 3.

以前有沒有人看過類似的東西,或者有任何想法如何診斷?我不知道在哪裏何去何從......

編輯:

行,所以爲了簡便起見,我錯過了一些事情,我不認爲是相關的,我是多麼錯誤...

除pageType參數外,還有一個可選類別。這將檢查該類別是否存在於數據庫中,並將其添加到視圖模型中。

在視圖中,有一個致電@ Html.RenderAction,它將類別Id發送到另一個操作方法。我不知道爲什麼我這樣做,而不是僅僅調用@ Html.Partial傳遞模型,但嘿。無論如何,如果沒有被發現的範疇,這種操作方法返回一個HttpNotFound結果,因此404

我剛換了「孩子」的操作方法使用空對象作爲模型返回局部視圖(新空的列表在我的情況),它解決了這個問題。

它需要一點挖掘,但我最終到了那裏,將來只有當我真的需要做額外的動作處理,而無法在初始控制器動作中完成時,纔會使用RenderAction。

當然,這並不能解釋爲什麼它在服務器本地訪問時工作。我想這肯定是與HttpNotFound結果有關。

+0

看來pageType可能很重要。你能指定什麼Index()是用pageType做什麼的? – 2011-05-30 16:36:22

回答

2

所以,只是爲了解決這個問題。在父視圖我不得不@Html.RenderAction調用這反過來執行下面的代碼:

public ActionResult SubCategories(string categoryName) 
{ 
    Category category = CategoryRepository.GetCategory(categoryName); 
    if (category == null) 
     return HttpNotFound(); 

    return PartialView("Categories", category.SubCategories); 
} 

這是返回一個ActionResult的HttpNotFound()這反過來又導致了404父視圖。

如果找不到並且解決了問題,我更改了代碼以使用空列表作爲模型。

public ActionResult SubCategories(string categoryName) 
{ 
    IList<Category> subCategories = new List<Category>(); 

    Category category = CategoryRepository.GetCategory(categoryName); 
    if (category != null) 
     subCategories = category.SubCategories; 

    return PartialView("Categories", subCategories); 
} 
2

如果您將電話從Discussions更改爲Index,會發生什麼情況?如果您使用1而不是2,那會有所作爲嗎?

public ActionResult Discussions() 
{ 
    return Index(1); 
} 
+0

似乎沒有什麼區別,我也嘗試將不同的值傳入索引操作...再次在服務器上正常訪問,但不在網絡上 – robmzd 2011-05-30 16:46:52

+0

因此,指南是唯一一個可以在網絡上使用的工具嗎?索引和討論失敗? – 2011-05-30 16:49:33

+0

似乎是這樣的,是的 – robmzd 2011-05-30 16:52:38

相關問題