Web复选框不提供功能值

时间:2012-11-02 23:34:39

标签: c# asp.net checkbox web components

我有一个奇怪的问题,我似乎无法弄清楚。我为我在服务器上运行的商业应用程序创建了一个Web组件。如果我将cbxGramEnabled.Checked更改为TrueFalse,则该功能运行正常并进行更改。但是,如果我离开cbxGramEnabled.Checked,则该功能不会更新数据库。

运行组件的代码如下所示:

private void WriteToSQL( )
{
    WriteEnableGram( _pkKey, cbxGramEnabled.Checked);
}

我的自定义组件上的cbxGramEnabled.CheckedCheckBox

private void WriteEnableGram( int nPKkey, bool bChecked)
{
    string szQuery = string.empty;

    if (bChecked == true)
        szQuery = "UPDATE dbo.CustomKeyAttr SET EnableGram = 1 WHERE pkCustomKeyAttr = " + nPKkey.ToString() + ";";
    else
        szQuery = "UPDATE dbo.CustomKeyAttr SET EnableGram = 0 WHERE pkCustomKeyAttr = " + nPKkey.ToString() + ";";


    try
    {
        string szConString = @"Data Source=.\sqlexpress;Initial Catalog=MetricDB;User ID=webuser;Password=mypass;"; 
        using (var Conn = new SqlConnection(szConString))
        {
            Conn.Open();
            using (SqlCommand dbQuery = new SqlCommand(szQuery, Conn))
            {
                dbQuery.ExecuteNonQuery();
            }
        }
    }
    catch (SqlException)
    {
    }
    catch (Exception)
    {
    }
    finally
    {
        cbxEnableGram.Text = szQuery; // at least display what the query is somewhere on the page....
    }
}

1 个答案:

答案 0 :(得分:0)

首先,我们假设以下情况属实:

  

布尔值可以是true; falsenull(未分配)。

复选框的checked属性可以包含这些值。 我们也假设

  

如果cbxGramEnabled在运行时在该行代码中包含对Checkbox实例的引用,则checked的值永远不会为{{1}除非它的框架实现中有一些奇怪的错误。我假设这是一个.NET复选框?说明:仅当该对象的构造函数已完成运行并且已将所有属性设置为与null不同的默认值时,才存在引用。

因为,如果null属性的值为checkedtrue,则代码将正常执行,正如您尝试使用文字真/假值所证明的那样,< strong>我们确定实际值为false 。声明2证明 null在您的代码中不包含对象引用。

基本上,变量cbxGramEnabled没有实际值,它包含cbxGramEnabled引用。原因是您的代码在创建此复选框之前执行。

通常在Web应用程序中,当页面仍在加载(创建组件)并且您的代码在页面完全加载之前执行时,会发生这种情况。这可能发生在到服务器的往返之间!我很确定这就是问题所在......