2010-02-25 33 views
1

我對MVC很新,所以這可能看起來像一個明顯的問題,但是當發佈到我的ActionResult時,ActionResult被調用,但視圖不會改變。

我正在做的是有一個基本的搜索頁面,用戶可以搜索我的數據庫和結果返回和分頁。

這裏是javascript,在我的控制器中調用ActionResult。

function SubmitSearch() { 

    var searchBox = document.getElementById('searchBox'); 

    $.post("MyController/SearchResults/", 
    { 
     searchString: searchBox.value, 
     page: 0 
    }); 

    window.location = "../DriverStudio/Drivers/SearchResults/" + searchBox.value + '/0'; 
} 

我當前的解決方案(這是一個可怕的黑客)是註釋掉$。員額(因爲我的路線是建立在一種方式在了window.location會調用SearchResutls的ActionResult),並設置窗口.location轉到用戶搜索的內容,從第0頁開始。

必須有更好的方法。我該怎麼辦?

回答

2

設置您的SearchResults操作以返回僅包含要執行搜索時要更新的頁面部分的部分視圖。這件作品應該放在一些容器中,以便更換。然後使用post方法的回調機制將該DIV的內容替換爲SearchResults操作返回的部分查看結果。從您的處理程序中返回false以停止執行默認提交操作。

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

    $.post("MyController/SearchResults/", 
    { 
     searchString: searchBox.val(), 
     page: 0 
    }, function(data) { 
     $('#searchResults').html(data); 
    }); 

    return false; 
} 

這是假設,看起來像一些人認爲的代碼:

<% using (Html.BeginForm()) { % 
     <label for="searchBox">Search:</label> 
     <%= Html.TextBox("searchBox") %> 
<% } %> 
<div id="searchResults"> 
</div> 
+0

謝謝tvan。它是否必須是局部視圖?爲什麼我無法返回整個視圖? – Darcy 2010-02-25 20:51:28

+2

@Darcy - 基本上和做普通(非AJAX)的帖子一樣。使用局部視圖只會發送更新的部分,這就是使用AJAX的一點。 – tvanfosson 2010-02-25 20:54:56

3

我不熟悉MVC,但除了將用戶重定向到window.location中的URL之外,您的ActionResult還能做什麼?

您可能需要實現一個回調,從jQuery docs

jQuery.post(url, data, callback, type) 

所以你傳遞的URL和數據,但沒有您要在返回的數據做什麼。

$.post("MyController/SearchResults/", 
     {searchString: searchBox.value,page: 0}, 
     function(result){ 
       //do something with what your actionresult returns here 
       window.location = result.url; 
     } 
     ); 
+0

嗯,這似乎是票。 'result.url'雖然不起作用。如果我提醒'結果',我得到的意見(所以DOCTYPE ....等東西)。我將如何從那裏獲得網址? – Darcy 2010-02-25 20:57:55

+0

爲什麼要做一個AJAX帖子,如果你打算只是轉過頭來,通過設置url來做一個正常的GET? – tvanfosson 2010-02-25 20:59:01

+0

我認爲在tvanfosson描述的方式,將HTML插入一個div。你可能只想提取body標籤中的元素。 – 2010-02-25 20:59:48