MVC 3 Перезагрузить текущую страницу с измененными значениями строки запроса

Фон:

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

Вопрос:

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

Пример:

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

URL: /Home/? Dropdownvalue= синий

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

/ Главная /? Dropdownvalue= красный

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

URL: /CustomerFavorite/? Dropdown= красный

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

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

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

Благодарю.

3 ответа

Решение

Спасибо Дарину за предоставленную ссылку для манипулирования строкой запроса с помощью 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

}

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

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

    }
  }
Другие вопросы по тегам