C# asp.net /Boolean /Arduino

本文关键字:Boolean Arduino net asp | 更新日期: 2023-09-27 18:02:48

你好,我在webform上有一个按钮,我想在第一次点击它发送"1"到arduino在第二点击"0",并持续这样,我编码它像这样:

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是SerialPort的名称;我有一种感觉,像布尔总是重置为假,从来没有得到值"真",我能做些什么来修复这个,请帮助,我是一个初学者在编程。

提前感谢您的帮助

C# asp.net /Boolean /Arduino

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

这是一个webform应用程序,这意味着你可以在任何地方点击这个按钮,那么你想在哪里保持当前登录用户或当前会话的"测试"状态?如果你想在当前会话中保持"test"状态,请尝试使用ViewState保存"test"值。


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;
        } 
    }

不需要检查== true,

if(test)

相同
if (test==true)  

你需要稍微改变一下你的逻辑。

   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;
    }