MVC 3 Перезагрузить текущую страницу с измененными значениями строки запроса - PullRequest
4 голосов
/ 06 октября 2011

Фон:

У меня есть макет MVC (основной вид), который использует @ Html.RenderAction для отображения раскрывающегося списка на левой боковой панели навигации. Этот раскрывающийся список будет отображаться на всех страницах сайта. Раскрывающийся список оборачивается в элемент формы, и при изменении раскрывающегося списка форма публикуется.

Вопрос:

Теперь, когда форма опубликована, мне нужно перезагрузить содержимое текущей страницы (независимо от того, на какой странице находится пользователь ...) со значением раскрывающегося списка, прикрепленным в строке запроса. Это будет означать замену значения, которое может уже присутствовать в строке запроса из предыдущего выбора.

Пример:

  1. Пользователь переходит на главную страницу сайта:

URL: / Home /? Dropdownvalue = blue

В этот момент в раскрывающемся списке отображается «Синий», как выбрано. Пользователь изменяет значение в раскрывающемся списке на «Красный». Мне нужно перезагрузить страницу со следующим URL -

/ Home /? Dropdownvalue = красный

  1. Пользователь переходит на другую страницу сайта:

URL: / CustomerFavorite /? Dropdown = red

Измените значение в раскрывающемся списке с «Красный» на «Зеленый».

Страница «CustomerFavourite» должна быть перезагружена зеленым в строке запроса.

Я прошу прощения за длинный пост. Но подумал о предоставлении дополнительной информации, чтобы прояснить проблему.

Спасибо.

Ответы [ 3 ]

7 голосов
/ 10 октября 2011

Спасибо Дарину за предоставленную ссылку для манипулирования javascript строкой запроса. Но я хотел решение на стороне сервера, поэтому вот как я его реализовал -

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

}
3 голосов
/ 06 октября 2011

Вы можете попытаться использовать метод 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, это автоматически перезагрузит текущую страницу, отправив значение раскрывающегося списка встрока запроса.

0 голосов
/ 06 октября 2011

Если вы используете 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 () {

    }
  }
...