Передача параметра между представлениями в MVC - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть ASP. NET Core MVC веб-приложение. У меня есть searchString параметр в методе Index. Когда параметр заполнен, я вижу значение в веб-ссылке, например ...?SearchString=202.

Я хотел бы отправить этот параметр во второй метод (например, Edit), чтобы не изменять его там, и отправить обратно в метод Index после того, как пользователь нажмет кнопку Назад. Идея состоит в том, что когда пользователь нажимает кнопку «Назад», он возвращается к представлению Index, но он потерял параметр searchString, и у пользователя нет отфильтрованной страницы в соответствии с предыдущим поиском.

1 Ответ

0 голосов
/ 11 февраля 2020

Если вы хотите передать searchString в путь Index-Edit-Index, вы можете использовать ViewBag, а затем передать его в качестве значения маршрута. Ссылка на следующую простую рабочую демонстрацию:

Индекс действия , сохранить строку searchString в ViewBag.SearchString.

public async Task<IActionResult> Index(string searchString)
{
  var movies = from m in _context.Movie
             select m;

  if (!String.IsNullOrEmpty(searchString))
  {
    movies = movies.Where(s => s.Title.Contains(searchString));
    ViewBag.SearchString = searchString;
  }

  return View(await movies.ToListAsync());
}

Просмотр индекса , добавить значение маршрута returnString в ссылку Редактировать

<a asp-action="Edit" asp-route-id="@item.Id" asp-route-returnString="@ViewBag.SearchString">Edit</a> 

Редактировать действие

public async Task<IActionResult> Edit(int? id,string returnString = null)
    {
        if (id == null)
        {
            return NotFound();
        }

        var movie = await _context.Movie.FindAsync(id);

        ViewBag.SearchString = returnString;

        if (movie == null)
        {
            return NotFound();
        }
        return View(movie);
    }

Редактировать вид , обратная ссылка

<div>
@if (ViewBag.SearchString != null)
{
    <a asp-action="Index" asp-route-searchString="@ViewBag.SearchString">Back to List</a>
}
else
{
    <a asp-action="Index">Back to List</a>
}
</div>
...