Na stronie internetowej mam tabelę. Obok tabeli jest przycisk "Dodaj nowy rekord". Kliknięcie przycisku powoduje, że do serwera jest wysyłane ajaxowe żądanie:

@Ajax.ActionLink("Dodaj pomiar +", "Add", "Measurement",  new AjaxOptions() { UpdateTargetId = "addWeightMeasurementModal" }, new {@data_toggle = "modal", @data_target = "#addWeightMeasurementModal" })

Kontroler zwraca PartialView, który jest kodem html okienka:

[HttpGet]
public ActionResult Add()
{
    return PartialView("../Measurement/AddWeightPartial");
}

Teraz pojawia się okienko (modal bootstrapowy) z polami do wpisania danych, a zatwierdzenie przyciskiem powoduje, że kolejne ajaxowe żądanie leci do serwera:

@using (Ajax.BeginForm("Add", "Measurement", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "weight-table", OnComplete = "closeModal" }))
{
    ...
    ...
    ...
}

I w kontrolerze odbieram dane, waliduję i wrzucam do bazy danych

[HttpPost]
public ActionResult Add(int id, DateTime MeasurementDate, int value)
{
    ...
    ...
    ...
    return RedirectToAction("Index");
}

Jak widać, na końcu jest return RedirectToAction("Index"); a metoda Index wygląda następująco:

public ActionResult Index(DateTime? ResultsFrom, DateTime? ResultsTo, int? PageNumber)
{
    var pageNumber = (PageNumber == null || PageNumber <= 0) ? 1 : (int)PageNumber;
    var resultsFrom = (ResultsFrom ?? DateTime.Now.AddMonths(-1));
    var resultsTo = (ResultsTo ?? DateTime.Now);
    var pageSize = 5;
    ...
    ...
    ...

    return (Request.IsAjaxRequest())
        ? (ActionResult)PartialView("WeightTablePartial", model)
        : View(model);
}

To znaczy, że po dodaniu nowego wpisu zmienne ResultsFrom , ResultsTo, PageNumber , będą null, więc zostaną im przypisane domyślne wartości, więc pobrane z bazy i wklejone do tabeli zostaną dane za inny okres, niż były widoczne przed dodaniem nowego rekordu do tabeli.

Jak najlepiej to ugryźć?
Zamienić

[HttpGet]
public ActionResult Add()

na:

[HttpGet]
public ActionResult Add(SearchCriteriaViewModel searchCriteria)
{
    var model = new AddWeightMeasurementViewModel();
    model.SearchCriteria = searchCriteria;
	
    return PartialView("../Measurement/AddWeightPartial", model);
}

czy może zapisywać ustawienia wyszukiwania np. w ViewBag i w momencie jeśli przyszło np. ResultsFrom == null, a ViewBag.ResultsFrom != to po prostu podmieniać ResultsFrom?