Добавить значение в RoutValues и сохранить текущие значения в ASP.NET MVC 3
У меня есть представление с двумя формами один из них для объявления строк на странице. В посте мне нужно, чтобы мой URL был таким же и просто добавить новый параметр. сейчас я использую вот так:
[HttpPost]
public ActionResult Index(FormCollection collection) {
//Calculate Row Count
return RedirectToAction("Index", new { RC = RowCount });
}
с этой реализацией все мои параметры теряются и просто RC = rowcountnumber
заменены. Как мне сохранить параметры и просто добавить новые RC
к этому? Какой самый быстрый способ сделать это? здесь есть проблемы с производительностью?
3 ответа
Проверьте это, я не уверен, что это быстрее или насчет производительности, но сработало:
RouteValueDictionary rt = new RouteValueDictionary();
foreach(string item in Request.QueryString.AllKeys)
rt.Add(item, Request.QueryString.GetValues(item).FirstOrDefault());
rt.Add("RC", RowCount);
return RedirectToAction("Index", rt);
К сожалению, я не могу проверить это прямо сейчас, но я подозреваю, что это будет работать (хотя это изменяет параметр коллекции). И это будет хорошо работать, так как он не копирует какие-либо предметы из старой коллекции; просто добавив один элемент к нему.
[HttpPost]
public ActionResult Index(FormCollection collection)
{
//Calculate Row Count
collection.Add("RC", RowCount);
return RedirectToAction("Index", collection);
}
Сделать форму GET
не POST
потому что запрос ничего не меняет на сервере, поэтому GET
глагол является более подходящим, а также GET
глагол передаст все значения формы как параметры строки запроса, так что вы получите желаемый эффект
сделать это в Html.BeginForm
третий параметр должен быть FormMethod.Get