質問

これは明白な質問のように見えるかもしれませんので、私は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;
         }
       );
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top