Как проверить, если веб-страница представлена ​​только 3 раза? - PullRequest
1 голос
/ 01 июня 2011

У меня есть веб-форма, в которой я должен убедиться, что кнопка «ОТПРАВИТЬ» нажимается не более 3 раз.У меня есть некоторая логика в форме, которая запрещает пользователю вводить что-либо после 3 неудачных попыток.

Это моя логика, но я знаю, что это неправильно:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    int count = 0;
    count++;
    if (count <= 3) 
    {
        Function1();
    }
    else
        MessageBox("You submitted your information more than 3 times.");

}

Это не сработает, потому что при каждом обновлении страницы счет будет нулевым.

Ответы [ 6 ]

1 голос
/ 01 июня 2011

Сохраните переменную в ViewState страницы. Инициализируйте его значение при первой загрузке страницы:

void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        this.ViewState["Count"] = 0;
    }
}

При событии Button.Click увеличьте значение переменной count:

protected void btnSubmit_Click(object sender, EventArgs e)        
{            
    Int32 count = Int32.Parse(this.ViewState["Count"].ToString()) + 1;
    this.ViewState["Count"] = count;
    if (count > 3)
    {
        // Do something ..
    }
}
1 голос
/ 01 июня 2011

Вы можете сохранить счет в переменной сеанса.

int submitCount = 0;
if (Session["submitCount"] != null)
{
    submitCount = int.Parse (Session["submitCount"]);
}
// Code based on submitCount
Session["submitCount"] = ++submitCount; // Save # of submits to session
0 голосов
/ 01 июня 2011

Вы также можете сохранить значение в скрытом поле.

<asp:HiddenField ID="hfSubmitCount" runat="server" Value="0" />

protected void btnSubmit_Click(object sender, EventArgs e)
{
    int count;
    if(!int.TryParse(hfSubmitCount.Value, out count))
        count = 0;
    count++;
    hfSubmitCount.Value = count.ToString();
    if (count <= 3)
        Function1();        
    else
        MessageBox("You submitted your information more than 3 times.");

}
0 голосов
/ 01 июня 2011

Данные не сохраняются во всех веб-запросах, поэтому вам нужно будет сохранить счет в какой-либо форме постоянного хранилища. У вас есть несколько вариантов: куки, переменные сеанса, viewstate, база данных и т. Д.

База данных, пожалуй, самая безопасная, поскольку она размещена на сервере, и пользователь не может вмешаться в нее, но она также требует дополнительной настройки. Проблема с переменными сеанса и состоянием просмотра состоит в том, что, хотя они сохраняются в веб-запросах, они не являются постоянными, поэтому пользователь сможет отправить четвертый запрос после истечения времени ожидания сеанса. Куки имеют ту же проблему.

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

0 голосов
/ 01 июня 2011

Это будет работать (не проверено):

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if(Session["Clicked"] != null) 
        {
            int clicked = Convert.ToInt32(Session["Clicked"]) + 1;
            if(clicked == 3) 
            {
                MessageBox("You submitted your information more than 3 times.");
                return;
            }
            else
            {
                Session["Clicked"] = clicked;
            }

        } 
        else
        {
            Session["Clicked"] = 1;
        }

        Function1();
    }

Cookie будет даже более устойчивым.

0 голосов
/ 01 июня 2011

Не знаю ни одного asp.net, но вы должны использовать сессию, чтобы сохранить счет этого. Логика должна быть:

if (session variable do not exist)
 store session variable

else
 (increment session variable)

надеюсь, это поможет

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