简体   繁体   中英

C# asp.net /Boolean /Arduino

Hello i have one button on webform and i would like that on first click it send "1" to arduino on second click "0" and continusly like that, i coded it like that:

Boolean test == false;
 protected void Button3_Click(object sender, EventArgs e)
    {

        if (test == false)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("1");
            serijska_vrata.Close();
            test = true;
        }
         if(test == true)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("0");
            serijska_vrata.Close();
            test = false;

        } 

    }

Serijska_vrata is name of SerialPort; I have a felling like boolean always resets to false, and never get value "true", what can i do to repair this, please help, i`am a beginner in programming.

Thank you for your help in advance

是的,它永远不会写成真的,因为在ASP.Net中,每次将其回发到服务器时,整个代码将被执行并呈现为HTML,然后服务器将处置整个对象,在下次服务器将再次创建测试对象并为其分配false,最好的解决方案是将Boolean的状态保存为隐藏值,然后从中读取并更新它,或者可以使用session,但是如果过期,则需要处理session状态。

This is a webform application , that means you can click this button in everywhere,So where do you want keep "test" state with current login user or current Session? If you want keep "test" state in current Session,please try use ViewState to save "test" value.


private bool _test;
public bool test

{
    get{
        bool.TryParse(ViewState["test"],out _test);
        return _test;
    }
   set{
        ViewState["test"]=value;
    }
}


protected void Button3_Click(object sender, EventArgs e)
    {

        if (test == false)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("1");
            serijska_vrata.Close();
            test = true;
        }
         if(test == true)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("0");
            serijska_vrata.Close();
            test = false;

        } 

    }

No need to check for == true,

if(test)

is the same as

if (test==true)  

You need to change you logic slightly. Switch the two statements round.

   if (test)
    {
        serijska_vrata.Open();
        serijska_vrata.Write("0");
        serijska_vrata.Close();
        test = false;        }
    // Add the else here and remove the if otherwise it
    // will execute the if statement and test will always be false
    // It also helps if test is not initialized.
    else
    {
        serijska_vrata.Open();
        serijska_vrata.Write("1");
        serijska_vrata.Close();
        test = true;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM