0

私は一般的に Web プログラミングに慣れていないので、これはおそらく非常に単純な質問です。しかし、ウェブ上では何も見つかりませんでした。

私がやりたいことは、入力された検索文字列を使用してコントローラーを呼び出し、データベースから結果を返し、結果をページ付けすることです。現在、ボタンが押されたときに呼び出される関数を使用しています。関数は次のようになります。

function SubmitSearch() {

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

    $.post("MyController/MyAction/",
    {
        searchString: searchBox.value,
        page: null
    }, function(result) {
        $('#searchResults').html(result);
        searchButton.value = "Search";
    });
}

コントローラーが呼び出され、searchResults div に結果が入力され、ページ分割されます。ユーザーは、返された検索結果をクリックして詳細を表示できます。

問題は、ユーザーがブラウザの「戻る」ボタンをクリックすると、ページが検索を開始する前の状態に戻ることです。これは ajax 呼び出しが原因です。私がやりたいことは、コントローラーを呼び出して、Google のようにページをロードすることです。PartialView を使用する代わりに、View を使用します (私の推測では)。

コントローラーを呼び出して、ページに結果をリロードさせるにはどうすればよいでしょうか。これは間違いなく簡単なはずなので、何か基本的なことが欠けているに違いありません。

4

3 に答える 3

2

AJAX を使用したくない場合は、次のようにテキスト フィールドをページのフォーム要素に配置する必要があります。

<form action="MyController/MyAction/" method="get">
  <input id="SearchBox" name="SearchBox" type="text" />
  <button type="submit">Search</button>
</form>

次に、コントローラーで結果のリストを含むビューを返します。

おそらく、RESTful URL とPRG (Post、Redirect、Get)パターンを調べて、戻るボタンの整合性を維持し、ページの正しいブックマークなどを有効にすることもお勧めします。

于 2010-03-03T15:41:52.997 に答える
1

Aspx:

<% using (Html.BeginForm<MyController>(m => m.MyAction(null)) { %> 
    <%= Html.TextBox("q"); %>
<% } %>
// Listing

コントローラ:

public class MyController : Controller
{
    public ActionResult MyAction(string q)
    {
        var repository; // instance of your repository.

        if (String.IsNullOrEmpty(q))
        {
            return View(repository.GetAllBlogs());
        }
        return View(repository.SearchBlogs(q));
    }
}
于 2010-03-03T15:43:34.017 に答える
1

アプリを変更するのではなく、[戻る] ボタンが押されたときに役立つ AJAX 履歴ライブラリを実際に探しているのではないかと思います。このブログ投稿をご覧ください。

于 2010-03-03T15:20:31.573 に答える