2012-08-10 27 views
3

我正在開發一個MVC3應用程序與EF和我想使用戶界面流利用jQuery AJAX,用戶將能夠通過URL瀏覽,如果他知道它或者他可能會收到指向特定路線的鏈接,但是,一旦頁面完全加載,它需要流利,所以我想出了一個想法,我想在這裏討論它,然後再對解決方案進行更改。MVC&ajax:我應該創建更多視圖嗎?

這裏是我想出了:

TestController.cs(方法代碼爲簡單起見,省略)

public ActionResult Index() { ... } 

public ActionResult Create() { ... } 
[HttpPost] 
public ActionResult Create(Test test) { ... } 

public ActionResult Update(int testID) { ... } 
[HttpPost] 
public ActionResult Update(Test test) { ... } 

public ActionResult Delete(int testID) { ... } 
[HttpPost] 
public ActionResult Delete(Test test) { ... } 

到目前爲止,它看起來像大多數控制器。我的看法如下:

Views\Test\List.cshtml 
Views\Test\Create.cshtml 
Views\Test\Details.cshtml 
Views\Test\Delete.cshtml 

現在,因爲我想這樣做異步:我改變了我的列表視圖,所以我可以添加,修改和刪除列表中,至今工作就像一個魅力。另外,用戶仍然可以使用url來瀏覽應用程序,請注意,應用程序內部的每個鏈接都會執行一個ajax請求來執行實際工作,但沒有路由/操作鏈接。

現在應用程序按預期工作,但現在我遇到了一些問題:有需要成爲ActionResult和PartialViewResult的視圖,這是因爲用戶可以輸入url:「/ Admin/Test」,應該返回整個頁面,或者可以點擊一個只加載「/ Admin/Test」內容並顯示它的錨點。爲了避免着名的頁面內頁錯誤,我寫了一個function來發送請求,並且當請求到達時,它只選擇我需要的內容,避免頁面內部的頁面和重複的視圖,但是響應是整個頁面,我不需要說,它不是最好的選擇,但是由於應用程序將被lan使用,我並不在乎過多的響應負載,但是隨後我需要在視圖中編寫JavaScript代碼,所以我的解決方案就像null,因爲使用jQuery選擇器只得到我需要的JavaScript不在那裏。

至於我的新的解決方案來解決我的最後的解決方案: 我以爲是我可能會離開原來的觀點,並創建另一個鑑於原名稱後附加詞「部分」,與控制器創建另一個方法相同的命名約定,並將新路線添加到我的路線表中。

爲了包裝起來,我需要的是: - 如果用戶輸入「/ Test」,響應應該是整個頁面,像過去一樣加載,屏幕閃爍白色等等。 - 但是,如果用戶單擊導航欄中的測試鏈接,則響應應該是異步的,並且只刷新我的佈局的內容。

任何想法?想法?建議?

+0

我認爲這是一個屬性,只允許通過juery或任何訪問的方法,類似於如何'[發佈]'的作品,然後你可以有控制器內的兩種不同的方法,一種只接受jquery,返回一個局部視圖,另一個是全視圖。 – 2012-08-10 18:28:13

回答

2

在你actionmethod你可以有

if (Request.IsAjaxRequest()) 
     return PartialView("_somePartialView"); 
else 
     return PartialView("_someOtherPartialView"); 
+0

並不是我尋找的答案,但它幫助我解決了創建某些視圖的問題。 +1讓我記住'IsAjaxRequest'。 – Esteban 2012-08-23 16:10:07

相關問題