4

バックグラウンド:

@Html.RenderAction を使用して左側のナビゲーション パネルにドロップダウンを表示する MVC レイアウト (マスター) ビューがあります。このドロップダウンは、サイトのすべてのページに表示されます。ドロップダウンはフォーム要素にラップされ、ドロップダウンの変更時にフォームが投稿されます。

質問:

ここで、フォームが投稿されたら、クエリ文字列にドロップダウンの値を付けて、現在のページ (ユーザーが現在表示しているページに関係なく...) のコンテンツを再読み込みする必要があります。これは、以前の選択からのクエリ文字列に既に存在する可能性のある値を置き換えることを意味します。

例:

  1. ユーザーは Web サイトのホームページに移動します。

URL: /Home/?dropdownvalue=blue

この時点で、ドロップダウンには「青」が選択済みとして表示されます。ユーザーがドロップダウンの値を「赤」に変更します。次の URL でページをリロードする必要があります -

/ホーム/?ドロップダウン値=赤

  1. ユーザーはサイト内の別のページに移動します。

URL: /CustomerFavorite/?dropdown=red

ドロップダウンの値を「赤」から「緑」に変更します。

「CustomerFavourite」ページは、クエリ文字列に「Green」を指定してリロードする必要があります。

長文で申し訳ありません。しかし、問題を明確にするためにいくつかの追加情報を提供することを考えました。

ありがとう。

4

3 に答える 3

8

クエリ文字列の JavaScript 操作のリンクを提供してくれた Darin に感謝します。しかし、サーバー側のソリューションが必要だったので、実装方法は次のとおりです-

public ActionResult _ColorSelection(ColorModel model)
{
    string selectedColor = model.Color.Value;

    // Modify Querystring params...

    NameValueCollection querystring = 
            HttpUtility.ParseQueryString(Request.UrlReferrer.Query); // Parse QS

    // If Querystring contains the 'color' param, then set it to selected value
    if (!string.IsNullOrEmpty(querystring["color"]))
    {
        querystring["color"] = selectedColor;
    }
    else  // Add color key to querystring
    {
        querystring.Add("color", selectedColor);
    }

    // Create new url
    string url = Request.UrlReferrer.AbsolutePath 
                         + "?" + querystring.ToString();

    return Redirect(url); // redirect

}
于 2011-10-10T17:59:51.470 に答える
3

ドロップダウンがラップされているフォームの GET メソッドを使用してみてください。

@using (Html.BeginForm(null, null, FormMethod.Get))
{
    @Html.Action("SomeActionThatRendersTheDropDown", "SomeController")
}

または、フォーム全体がアクション内にラップされている可能性があります。

@Html.Action("SomeAction", "SomeController")

次に、javascript でドロップダウンの変更イベントをサブスクライブし、フォームの送信をトリガーします。

$(function() {
    $('#DropDownId').change(function() {
        $(this).closest('form').submit();
    });
});

GET リクエストを使用したため、現在のページが自動的にリロードされ、クエリ文字列のドロップダウンの値が送信されます。

于 2011-10-06T19:57:17.547 に答える
0

jQuery を使用している場合は、選択した値をリストにポストする関数を作成できます。

$(document).ready(function () {
  $("#ListId").change(function () {
    $.ajax({
    url: "CustomerFavorite/Edit",
    type: "POST",
    data: "colour=" + $("#ListId").val(),
    success: function (result) {
        //Code to update your page
        }
    },
    error: function () {

    }
  }
于 2011-10-06T19:48:27.540 に答える