используя ту же переменную сеанса на моих страницах - PullRequest
0 голосов
/ 30 марта 2012

Еще один вопрос, ребята.

Относительно переменных сеанса. У меня есть поле ввода (как видно из одного из моих предыдущих вопросов) Я положу здесь некоторый код, чтобы вы, ребята, могли видеть

   function getBaseUrl() {
                return "@Url.Content("~/paging")";
            }

            function LocationSearch(baseUrl) {
                 window.location = getBaseUrl() + "/LocationSearch?searchstring=" + (document.getElementById('vestigingen').value);
            }

это моя функция javascript, вызывающая функцию моего контроллера.

  <input type="text" class="search-query span3" id="vestigingen">
                  <a class="zoekbtn" href="javascript:void(0);" onclick="LocationSearch();">zoeken</a>

Эти двое используются для передачи моей строки поиска моему контроллеру.

Это моя функция в моем контроллере пейджинга

   public ActionResult LocationSearch(int? page, string searchstring)
    {
        if (searchstring != null)
        {
            Session["location"] = searchstring;
        }
        var searchVestigingen = ziekenhuisRepository.GetZiekenhuisList();  //sloppy! get rid of implicity 
        int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
        try
        {
            if (char.IsDigit(Session["location"].ToString(), 0))
            {
                searchVestigingen = ziekenhuisRepository.FindZipcodeVestigingen(Session["location"].ToString());
            }
            else
            {
                searchVestigingen = ziekenhuisRepository.FindLocationVestigingen(Session["location"].ToString());
            }
            if (searchVestigingen.Count() <= 0)
            {
                return View("NoResults");
            }
        }
        catch (Exception)
        {
            return View("NoResults");                
        }

        return View(searchVestigingen.ToPagedList(currentPageIndex, DefaultPageSize));
    }





 public ActionResult ListSearch(int? page, string searchstring)
    {
        if (searchstring != null)
        {
            Session["location"] = searchstring;
        }
      do stuff
     return View(etc. etc. )
    }

Как вы можете видеть, я использую переменную сеанса, чтобы просмотреть мой список страниц (я использовал пакет MvcPaging).

Есть две функции, в которых я хочу использовать одну и ту же переменную сеанса.

  • LocationSearch: кто-то хочет найти что-то, вставляет местоположение, нажимает кнопку отправки, и результат отображается.
  • СписокПоиск того же человека хочет найти что-то еще, но не хочет вставлять то же место снова.

Вот мой вопрос, как я могу получить то же значение, которое он только что вставил, для использования в моей другой функции (и наоборот, если он сначала нажал другую кнопку)?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

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

Таким образом, вы можете установить значение в одном классе или методе:

Session["location"] = searchstring;

И затем получить доступ к нему из другого класса или метода:

searchstring = (string)Session["location"];

См. MSDN для получения дополнительной информации.

0 голосов
/ 30 марта 2012

Объект Session похож на глобальную ссылку для конкретного пользователя и сеанса.Используйте его, как хотите, и просто позвоните Session["location"] из любой точки вашего проекта.Вы пробовали это, и это не работает, или вы просто не уверены в безопасности?

Возможно, вам понадобится вызвать его так:

var location = System.Web.HttpContext.Current.Session["location"].ToString();  

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

...