jqueryの$ .Post doesntの変更ビュー。私は何をしますか?
-
22-09-2019 - |
質問
私は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を呼び出しますように設定されているので)、何にwindow.locationのセット(恐ろしいハックです)私の現在のソリューションは、$ .postをコメントアウトすることですユーザーは、ページ0から始まる、探します。
より良い方法がなければなりません。私は何をすべきか?
解決
は、検索が実行されたときに更新されるページの一部のみを含む部分のビューを返すために、あなたにsearchResultsアクションを設定します。この作品は、交換することが容易になり、いくつかの容器内に収容されなければなりません。次に、あなたにsearchResultsアクションから返された部分図の結果とそのDIVの内容を置き換えるために、ポストメソッドにコールバックメカニズムを使用します。デフォルトを停止するには、あなたのハンドラからリターン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>
他のヒント
私はMVCに精通していないんだけど、あなたのActionResultはそのURLにユーザーがあなたがwindow.locationの中に持っているのリダイレクト以外に何をするのでしょうか?
あなたはおそらく jQueryのドキュメントのから、コールバックを実装する必要があります。
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;
}
);