MVC 3 Перезагрузить текущую страницу с измененными значениями строки запроса
Фон:
У меня есть макет MVC (основной), который использует @Html.RenderAction для отображения раскрывающегося списка на левой боковой панели навигации. Этот раскрывающийся список будет отображаться на всех страницах сайта. Раскрывающийся список оборачивается в элемент формы, и при изменении раскрывающегося списка форма публикуется.
Вопрос:
Теперь, когда форма опубликована, мне нужно перезагрузить содержимое текущей страницы (независимо от того, на какой странице в данный момент находится пользователь...) со значением раскрывающегося списка, прикрепленным к строке запроса. Это будет означать замену значения, которое может уже присутствовать в строке запроса из предыдущего выбора.
Пример:
- Пользователь переходит на домашнюю страницу сайта:
URL: /Home/? Dropdownvalue= синий
В этот момент в раскрывающемся списке отображается "Синий". Пользователь изменяет значение в раскрывающемся списке на "Красный". Мне нужно перезагрузить страницу со следующим URL -
/ Главная /? Dropdownvalue= красный
- Пользователь переходит на другую страницу сайта:
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 () {
}
}