Сохраните данные в .net mvc - PullRequest
       15

Сохраните данные в .net mvc

2 голосов
/ 15 сентября 2009

Я использую поисковый модуль с поддержкой страниц результатов поиска. Пример, предоставленный NerdDinner, передает pagenumber в качестве параметра для действия Index, а действие использует pagenumber для выполнения запроса каждый раз, когда пользователь нажимает другой номер страницы.

Моя проблема в том, что в моем поиске используется гораздо больше критериев, таких как цена, материал, номер модели и т. Д., Чем просто номер страницы. Поэтому я хотел бы сохранить критерии после первого представления пользователей, чтобы мне нужно было только передавать номер страницы назад и вперед.

Использование ViewData невозможно, так как ViewData очищается после отправки в View.

Есть ли какой-нибудь хороший способ сохранить данные критериев, как я хочу?

1 Ответ

2 голосов
/ 15 сентября 2009

У вас есть два способа сделать это.

  1. Поместите данные, которые вы хотите сохранить, в сериализуемый сеанс, кэш или базу данных. Размещение этого в базе данных будет самым безопасным выбором, но это ухудшит вашу производительность.

  2. Вы можете сохранить сохраненные данные в скрытом HTML-теге. Пока информация не является конфиденциальной, эта опция должна работать хорошо.

вот некоторый вспомогательный код. Вы можете использовать это только в том же контроллере

public class questionController : Controller
{
    public QuestionFormData qdata;

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        qdata = (SerializationUtil.Deserialize(Request.Form["qdata"])
            ?? TempData["qdata"]
            ?? new QuestionFormData()) as QuestionFormData;
        TryUpdateModel(qdata);
    }

    protected override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        if (filterContext.Result is RedirectToRouteResult)
        {
            TempData["qdata"] = qdata;
        }
    }

Доступ к обновленной информации, как это

    public ActionResult Index()
    {
         DateTime d = qdata.date;
    }

На странице aspx

<%= Html.Hidden("qdata", SerializationUtil.Serialize(Model)) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...