Простое приложение веб-формы Windows для приложения asp.net

У меня есть простое приложение в веб-форме C# Windows (разработанное в Visual C# 2010 Express).

Всего 3 кнопки и 3 метки - когда я нажимаю кнопку 2, у меня есть номер дня в int (от 0 до 6), а затем я переключаю это число на правильное название дня в метке. Также, когда я нажимаю кнопку 1 или 3, у меня есть +1 или -1 день во всех метках.

Вот пример:

    private void button1_Click(object sender, EventArgs e)                                              
    {

        NumberDay--; 
        if (NumberDay < 0) NumberDay = 6; 
        switch (NumberDay)
        {
            case 0:
                label1.Text = "Saturday";                               
                label2.Text = "Sunday";
                label3.Text = "Monday";
                break;
            case 1:
                label1.Text = "Sunday";
                label2.Text = "Monday";
                label3.Text = "Tuesday";
                break;
            case 2:
                label1.Text = " Monday";
                label2.Text = "Tuesday";
                label3.Text = "Wednesday";
                break;
            case 3:
                label1.Text = "Tuesday";
                label2.Text = "Wednesday";
                label3.Text = "Thursday";
                break;
            case 4:
                label1.Text = "Wednesday";
                label2.Text = "Thursday";
                label3.Text = "Friday";
                break;
            case 5:
                label1.Text =  "Thursday";
                label2.Text =  "Friday";
                label3.Text = "Saturday";
                break;
            case 6:
                label1.Text = "Friday";
                label2.Text = "Saturday";
                label3.Text = "Sunday";
                break;
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        button1.Enabled = button3.Enabled = true; 
        DateTime today = DateTime.Now;                                     
        NumberDay = (int)today.DayOfWeek;                             

        switch (NumerDnia)
        {
            case 0:
                label1.Text = "Saturday";                               
                label2.Text = "Sunday";
                label3.Text = "Monday";
                break;
            case 1:
                label1.Text = "Sunday";
                label2.Text = "Monday";
                label3.Text = "Tuesday";
                break;
            case 2:
                label1.Text = " Monday";
                label2.Text = "Tuesday";
                label3.Text = "Wednesday";
                break;
            case 3:
                label1.Text = "Tuesday";
                label2.Text = "Wednesday";
                label3.Text = "Thursday";
                break;
            case 4:
                label1.Text = "Wednesday";
                label2.Text = "Thursday";
                label3.Text = "Friday";
                break;
            case 5:
                label1.Text =  "Thursday";
                label2.Text =  "Friday";
                label3.Text = "Saturday";
                break;
            case 6:
                label1.Text = "Friday";
                label2.Text = "Saturday";
                label3.Text = "Sunday";
                break;
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {

        NumberDay++; 
        if (NumberDay > 6) NumberDay = 0; 
        switch (NumberDay)
        {
            case 0:
                label1.Text = "Saturday";                               
                label2.Text = "Sunday";
                label3.Text = "Monday";
                break;
            case 1:
                label1.Text = "Sunday";
                label2.Text = "Monday";
                label3.Text = "Tuesday";
                break;
            case 2:
                label1.Text = " Monday";
                label2.Text = "Tuesday";
                label3.Text = "Wednesday";
                break;
            case 3:
                label1.Text = "Tuesday";
                label2.Text = "Wednesday";
                label3.Text = "Thursday";
                break;
            case 4:
                label1.Text = "Wednesday";
                label2.Text = "Thursday";
                label3.Text = "Friday";
                break;
            case 5:
                label1.Text =  "Thursday";
                label2.Text =  "Friday";
                label3.Text = "Saturday";
                break;
            case 6:
                label1.Text = "Friday";
                label2.Text = "Saturday";
                label3.Text = "Sunday";
                break;
        }
    }

В обычном приложении С# все работает. Когда я пытаюсь сделать то же самое в asp.net (Visual Express 2012 для Web), у меня возникают проблемы:

  1. Когда я нажимаю кнопку 2, все хорошо. Когда я нажимаю кнопку 1/3 ОДИН РАЗ, у меня неправильный день во всех метках (или когда я нажимаю, ничего не происходит)

  2. Когда я нажимаю кнопку еще пару раз, ничего не происходит - страница не перезагружается (?) при каждом нажатии кнопки, метка не меняется.

Кто-нибудь может мне помочь?


person MichalObi    schedule 10.01.2014    source источник
comment
Является ли NumberDay статической переменной уровня страницы?   -  person Neeraj Kumar Gupta    schedule 10.01.2014
comment
Вы новичок в Asp.net, поэтому сначала погуглите основы Asp.net. Приложения Asp.net и Windows полностью различаются с точки зрения состояния.   -  person Neeraj Kumar Gupta    schedule 10.01.2014
comment
@user2456849: user2456849: Пожалуйста, предоставьте также код ASPX, чтобы мы наверняка могли вам помочь.   -  person Venkatesh Ellur    schedule 10.01.2014
comment
int NumberDay объявляется перед protected void Page_Load   -  person MichalObi    schedule 10.01.2014
comment
В asp.net NumberDay сбрасывается в каждом посте назад   -  person Alborz    schedule 10.01.2014


Ответы (1)


Если вы только что объявили свою переменную «NumberDay» на уровне страницы, как это

int NumberDay; 

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

private void button1_Click(object sender, EventArgs e)                                              
{

    NumberDay = ViewState["VS_NumberDay"] != null ? Convert.ToInt32(ViewState["VS_NumberDay"]) : 0;
    NumberDay--;         

    if (NumberDay < 0) NumberDay = 6; 

    ViewState["VS_NumberDay"] = NumberDay;

    switch (NumberDay)
    {
        case 0:
            label1.Text = "Saturday";                               
            label2.Text = "Sunday";
            label3.Text = "Monday";
            break;
        case 1:
            label1.Text = "Sunday";
            label2.Text = "Monday";
            label3.Text = "Tuesday";
            break;
        case 2:
            label1.Text = " Monday";
            label2.Text = "Tuesday";
            label3.Text = "Wednesday";
            break;
        case 3:
            label1.Text = "Tuesday";
            label2.Text = "Wednesday";
            label3.Text = "Thursday";
            break;
        case 4:
            label1.Text = "Wednesday";
            label2.Text = "Thursday";
            label3.Text = "Friday";
            break;
        case 5:
            label1.Text =  "Thursday";
            label2.Text =  "Friday";
            label3.Text = "Saturday";
            break;
        case 6:
            label1.Text = "Friday";
            label2.Text = "Saturday";
            label3.Text = "Sunday";
            break;
    }
}

private void button2_Click(object sender, EventArgs e)
{
    button1.Enabled = button3.Enabled = true; 
    DateTime today = DateTime.Now;                                     
    NumberDay = (int)today.DayOfWeek;                             
    ViewState["VS_NumberDay"] = NumberDay;
    switch (NumerDnia)
    {
        case 0:
            label1.Text = "Saturday";                               
            label2.Text = "Sunday";
            label3.Text = "Monday";
            break;
        case 1:
            label1.Text = "Sunday";
            label2.Text = "Monday";
            label3.Text = "Tuesday";
            break;
        case 2:
            label1.Text = " Monday";
            label2.Text = "Tuesday";
            label3.Text = "Wednesday";
            break;
        case 3:
            label1.Text = "Tuesday";
            label2.Text = "Wednesday";
            label3.Text = "Thursday";
            break;
        case 4:
            label1.Text = "Wednesday";
            label2.Text = "Thursday";
            label3.Text = "Friday";
            break;
        case 5:
            label1.Text =  "Thursday";
            label2.Text =  "Friday";
            label3.Text = "Saturday";
            break;
        case 6:
            label1.Text = "Friday";
            label2.Text = "Saturday";
            label3.Text = "Sunday";
            break;
    }
}

private void button3_Click(object sender, EventArgs e)
{

    NumberDay = ViewState["VS_NumberDay"] != null ? Convert.ToInt32(ViewState["VS_NumberDay"]) : 0;
    NumberDay++;         
    if (NumberDay > 6) NumberDay = 0; 

    ViewState["VS_NumberDay"] = NumberDay;

    switch (NumberDay)
    {
        case 0:
            label1.Text = "Saturday";                               
            label2.Text = "Sunday";
            label3.Text = "Monday";
            break;
        case 1:
            label1.Text = "Sunday";
            label2.Text = "Monday";
            label3.Text = "Tuesday";
            break;
        case 2:
            label1.Text = " Monday";
            label2.Text = "Tuesday";
            label3.Text = "Wednesday";
            break;
        case 3:
            label1.Text = "Tuesday";
            label2.Text = "Wednesday";
            label3.Text = "Thursday";
            break;
        case 4:
            label1.Text = "Wednesday";
            label2.Text = "Thursday";
            label3.Text = "Friday";
            break;
        case 5:
            label1.Text =  "Thursday";
            label2.Text =  "Friday";
            label3.Text = "Saturday";
            break;
        case 6:
            label1.Text = "Friday";
            label2.Text = "Saturday";
            label3.Text = "Sunday";
            break;
    }
}
person Neeraj Kumar Gupta    schedule 10.01.2014