Поддержание состояния по всему сайту в C # ASP.NET - PullRequest
0 голосов
/ 12 июля 2010

У меня есть сайт, который возвращает результаты поиска из Twitter, написанные на C # ASP.NET.Поиск работает очень хорошо.

Когда пользователь видит результаты, я хочу, чтобы они также имели гиперссылку типа «Следующая страница», которая будет выполнять поиск по последнему предыдущему результату (используя данные Twitter next_page),

Как я могу сохранить свойства, чтобы при нажатии на ссылку она снова запускала поиск с другими параметрами для следующих результатов?Я не могу использовать форму, так как на этой странице уже есть одна форма, и MS ограничивает одну форму на страницу (runat="server").

Пожалуйста, помогите, это сводит меня с ума.Я думал о включении кода, но не уверен, какой бит включить, так как он больше связан с тем, как ASP.NET работает так же, как и мой собственный код.

Ответы [ 3 ]

2 голосов
/ 12 июля 2010

Есть два простых способа сделать это:

Включите параметр в URL, который является ссылкой гиперссылки Next, URL может выглядеть примерно так:

http://mysite.com/myWebPage.aspx?currentPage=1

затем вы можете получить доступ к этому параметру из строки запроса в вашем коде.

Вы также можете сохранить его в сеансе:

Session["currentPage"] = 1;

затем при обратной передаче вы можете проверить это:

int currentPage = 0;
if (Session["currentPage"] != null)
    int.TryParse(Session["currentPage"].ToString(), out currentPage);

с сеансом он автоматически истекает в зависимости от настроек IIS, тогда как при использовании параметра строки запроса он не истекает (хотя пользователь может связываться с ним, поэтому вам придется проверить его перед его использованием).

2 голосов
/ 12 июля 2010

Есть сто разных способов решить эту проблему.Инфраструктура ASP.NET включает в себя нечто, называемое ViewState , которое позволяет странице и ее элементам управления сохранять произвольные данные и объекты при просмотре страниц.

Существует один <form>, но вы можетеиметь неограниченное количество ссылок и кнопок, которые отправляют форму по-разному - каждая из них может запускать свой собственный метод, когда страница отправляет обратно .

Простой способ использовать это в вашем случаесохранить параметр страницы по ссылке «следующая страница».Это очень простой пример, предполагающий, что вам нужно знать только номер страницы, но он помогает понять:

<asp:LinkButton runat="server" ID="next_page" Text="Next Page" OnClick="NextPage_Click" />

...

void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        LoadData(0);
    }
}

void LoadData(int page)
{
    //pull page of data from twitter & show on page
    next_page.CommandArgument = (page+1).ToString();
}

void NextPage_Click(object sender, EventArgs e)
{
    int page = int.Parse(((LinkButton)sender).CommandArgument);
    LoadData(page);
}

В этом примере мы устанавливаемCommandArgument свойство LinkButton для индекса страницы, который мы хотим.LinkButton инициирует вызов метода NextPage_Click, а инфраструктура ViewState в ASP.NET позволяет сохранять значение CommandArgument.

1 голос
/ 12 июля 2010

Ваши свойства сохраняют свои значения в viewstate.

Примерно так:

public int PageNumber
{  
     get
     {         
          object value == this.ViewState["PageNumber"];
          if(value != null)
          { 
               return (int)value;
          }
          else
          {
               return 1;
          }
     }
     set
     { 
          this.ViewState["PageNumber"] = value;
     }
}
...