Сохранять строку запроса в запросах в MVC 3 - PullRequest
3 голосов
/ 19 мая 2011

У меня есть страница, содержащая список клиентов с ActionLink, которая позволяет пользователю отображать (или скрывать) «неактивные» клиенты. showInactive=True присоединяется к URL как строка запроса к контроллеру. После отображения «неактивных» клиентов я затем редактирую одного из них, но когда я сохраняю любые изменения или возвращаюсь в список, строка запроса исчезает. Каков наилучший способ сохранить строку запроса в этих запросах? Я пробовал использовать словарь TempData, но, очевидно, я пытался использовать его для чего-то, для чего он не предназначен.

Ответы [ 2 ]

6 голосов
/ 19 мая 2011

Простой способ добиться этого - добавить параметр returnUrl к вашим действиям, например:

[HttpPost]
public ActionResult Edit(int id, ClientEditModel model, string returnUrl)
{
    if (!ModelState.IsValid) return View();
    try
    {
        // do something
        return Redirect(returnUrl);
    }
    catch
    {
        return View();
    }
}

Затем, на ваш взгляд, вы называете свое действие следующим образом:

@Html.ActionLink("Edit", "Edit", new { id = Model.Id, returnUrl = Request.RawUrl })

В этой настройке, когда пользователь завершает редактирование, он возвращается в то же самое место, где он был раньше, сохраняя не только showInactive, но также и любые другие параметры, которые могут быть в вашем списке, напримеркак номер страницы, критерии поиска, порядок сортировки и т. д.

1 голос
/ 19 мая 2011

Передайте параметр строки запроса на страницу редактирования и добавьте значение в качестве скрытого параметра поля формы. Если он не существует, по умолчанию используется значение false. Таким образом, когда вы выполняете свою запись редактирования и выполняете свою обработку, вы можете извлечь значение из связанной модели / FormCollection / etc и, основываясь на его значении, выполнить перенаправление с соответствующим значением параметра строки запроса.

return this.RedirectToAction("ListClients", new { showInactive = *INSERT THE VALUE* });

, что переводится как

/CurrentController/ListClients?showInactive=*value*
...