ASP.Net MVC - Передача объявленной стоимости для просмотра - PullRequest
1 голос
/ 03 декабря 2009

Я создаю страницу поиска, пользователь вводит текстовое поле и нажимает кнопку «Поиск», контроллер использует FormCollection в своем методе Action.

Я выполняю поиск и возвращаю результаты в представление, однако хочу вернуть то, что пользователь искал, в представление. Является ли TempData лучшим местом для этого или это риск?

Ответы [ 5 ]

6 голосов
/ 03 декабря 2009

Я бы сказал, что ваша модель для просмотра результатов должна содержать как результаты, так и критерии поиска.

Примеры:

public class ResultsViewModel
{
     public SearchModel SearchCriteria { get; set; }
     ...
}

public class SearchModel
{
     public string Category { get; set; }
     ...
}

затем просто заполните Критерии поиска в вашей модели представления результатов, и вы можете получить ее оттуда.

Предполагается, что ваш просмотр результатов строго типизирован до ResultsViewModel.

4 голосов
/ 03 декабря 2009

TempData в основном используется, когда результатом действия является перенаправление на другое действие, и вам необходимо поддерживать некоторое состояние.

Все, что вам нужно сделать, это добавить еще одну запись в словарь ViewData с «тем, что пользователь искал». Примерно так:

public ActionResult Search(FormCollection form) 
{
  // search algorithm

  ViewData["keywords"] = form["keywords"];
  return View();
}
2 голосов
/ 03 декабря 2009

TempData - это если вам нужен этот элемент в следующий раз, когда пользователь запросит что-то еще. Использование ViewData - это то, что вы ищете. Также помните, что искомое значение по-прежнему доступно в представлении как Request[searchBoxName].

1 голос
/ 03 декабря 2009

Создайте строго типизированное представление, используя модель представления, которая будет передавать всю необходимую информацию в представление и кодировать всю введенную пользователем информацию.

 public class ResultsSetViewModel
{
    public string Query { get; set; }

    public IList<Result> Results { get; set; }
}

Кодировать вмененные данные пользователя.

<h3>Search Results For: <%=Html.Encode(Model.Query) %></h3>
1 голос
/ 03 декабря 2009

Использование обоих приведенных выше предложений будет работать, однако лучше добавить нужные данные в модель, чем передавать их через ViewData.

Если вы передадите его в модель, вы получите преимущества его строгой типизации и избавите от необходимости добавлять логику для приведения записи ViewData в ваше представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...