2010-07-23 55 views
0

我正在使用具有路由到呈現部分視圖的操作的網站。很多這些局部視圖都是組成一個完整頁面的組件。是否我可以防止某些部分視圖直接請求時被提供服務?

例如在我正在處理的搜索頁面上有一個文本框,一個標籤列表和一個表格。

這些SEACH可以用類似

/Search/SearchPanel 
/Search/Tabs/{SearchTerm} 
/Search/ResultsTable/SearchTerm?tab=[currently selected tab] 

一個URL來訪問這些都是用的RenderPartial呈現在我的索引頁上。

當頁面加載時,它會以我想要的方式顯示每個組件。但此刻沒有什麼直接去到URL

/Search/Tabs 

只渲染這是毫無意義的頁面上的元素的其餘部分的上下文之外的標籤控制停止用戶。

有沒有辦法讓我防止這種情況?

回答

0

您是否試圖將您的Controller方法標記爲private

private PartialViewResult MyPartialResultMethod() 

這應該允許您從代碼中調用它來構建您的頁面並禁止任何公共訪問(例如通過URl)。

我現在正在測試這個功能,以確保我的答案是正確的,所以我會在測試時更新。

在您的選項卡示例中,您可以通過對私有選項卡使用第二種控制器方法來簡單地限制訪問。

所以你得東西,看起來像:

public ActionResult Tabs(string searchTerm) // When a search term is passed. 

private ActionResult Tabs() // When no search term is passed. 
0

您可以創建,檢查,如果Request.IsAjaxRequest()是真正的一個ActionFilter。如果不是(意味着用戶直接調用該視圖),請相應地重新指導。

+0

我喜歡這個,它承諾,直到通過實驗,我發現angularJs在指令中調用templateUrl不是ajax請求。當然,他們也不是孩子的行爲。因此沒有辦法阻止直接訪問angularJs所需的部分。 – Brad 2015-02-04 03:55:28

相關問題