0

フォームを自動送信し、部分ビューを介してプロジェクト全体で使用する検索を実行するドロップダウンリストがありますが、ページを更新しない限り、初めて使用する場合にのみ機能します。これは、jQueryMobileプロジェクトを備えたMVC4です。

これが私の部分的なビューにあるコードです、

<script type="text/javascript">
    $(function () {
        $("#CoastLineID").change(function () {
            var actionUrl = $('#TheForm').attr('action') + '/' + $('#CoastLineID').val();
             $('#TheForm').attr('action', actionUrl);
             $('#TheForm').submit();
         });
    });
</script>
<p>
    @using (Html.BeginForm("SearchCoast", "Home", FormMethod.Post, new { id = "TheForm" }))
    {
        @Html.DropDownList("CoastLineID", (SelectList)ViewBag.ArticleId, "Select a Coastline")
    }
</p>

部分ビューを使用するページ/ビューが何らかの方法で読み込まれるたびに、ページまたはリストを更新できる必要があると思います。これはjQueryの問題ですか?

何かアイデアがありますが、許可されていればサイトのURLを掲載できますか?

更新/編集

みんなありがとう、

jQuery MobileとMVCの混合でいくつかの問題が発生しましたが、これは主に、両方がURL文字列を異なる方法で処理する方法が原因で、すべて15年間のWeb開発に起因しています。すべてのjQueryMobileドキュメントは、従来のURL文字列を扱います。about / us.htmlこれはMVCの方法ではありません!

これは、ドロップダウンに入力するためのコントローラーコードです。

var coastlines = db.CoastLines.Select(c => new { c.CoastLineID, c.CoastLineName });
ViewBag.CoastLineId = new SelectList(coastlines.AsEnumerable(), "CoastLineID", "CoastLineName", 0);

そしてこれはウェブサイトです、

http://www.peninsulaguide.com.au/

「ビーチ検索」をクリックしてから「海岸線を選択」または「町を選択」をクリックすると機能しますが、その後は更新しないと何も機能しません。

ドロップダウンは2つありますが、1つ削除しても違いはありません。

乾杯、

マイク

4

2 に答える 2

0

あなたが説明していることは完全に有効なようです。フォームは、それを防ぐための措置を講じない限り、何度でも再送信できます。部分的なビューがこれに影響を与えることはありません。

部分ビューは、ページ間でHTMLのスニペットを共有できるようにするためのASP.NETMVCの工夫にすぎません。ページがブラウザにレンダリングされると、HTMLとjQueryを処理するだけになります。

最も可能性の高い原因は、jQueryのバグです。レンダリングされているHTMLを見ずに解決するのは難しいですが、次の2つのいずれかが発生していると推測しています。

  1. 送信する値の選択方法が原因で、同じ検索を何度も再送信する場合があります。
  2. ドロップダウンメニューの選択が変更されるたびに、イベントが正しく発生しません。

トラブルシューティングに関しては、次のことを試してください。

  • コントローラにブレークポイントを設定して、それがまったく呼び出されていないかどうか、およびリクエストで返される検索用語を確認します。
  • console.log('something')コールバック関数内にステートメントを追加してchange、選択が変更されるたびに呼び出されるようにします。

あなたのサイトへのリンクを投稿する場合は、jQuery側を見て喜んでいます。

于 2012-01-25T01:19:48.370 に答える
0

ページ全体を見ずに確実に判断するのは難しいですが、問題の原因として考えられるのは、フォームが投稿されたときに再読み込みされるページの一部のドロップダウンリストです。

その場合、問題は、イベントハンドラーを1つのドロップダウンリストに接続し、そのイベントハンドラーが、同じIDが指定された以降のすべてのドロップダウンリストからの変更イベントを処理することを期待していることです。

jQuery.live()のドキュメントでメソッドを読み、コードを次のように変更します。

$(function () {
    $("#CoastLineID").live('change', function () {
        var actionUrl = $('#TheForm').attr('action') + '/' + $('#CoastLineID').val();
         $('#TheForm').attr('action', actionUrl);
         $('#TheForm').submit();
     });
});

注: jQuery 1.7以降を使用している場合、.live()は非推奨であり、に置き換える必要があります.on()。これを実現するには、

$("#CoastLineID").live('change', function () { ... });

$(document).on('change', '#CoastLineID', function () { ... });

詳細については、のドキュメントをご覧.live()ください。これを指摘してくれたstian.netに感謝します。

于 2012-01-25T01:27:19.207 に答える