Web 复选框没有为功能提供价值

Posted

技术标签:

【中文标题】Web 复选框没有为功能提供价值【英文标题】:Web checkbox not providing value to function 【发布时间】:2012-10-23 15:46:24 【问题描述】:

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

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

private void WriteToSQL( )

    WriteEnableGram( _pkKey, cbxGramEnabled.Checked);

cbxGramEnabled.Checked 是我的 Web 应用自定义组件上的 CheckBox

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....
    

【问题讨论】:

我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 什么叫WriteToSQL?它可能与其他地方的代码有关。 WritetoSQL 代码肯定会运行。如果我将函数调用中的 cbxGramEnabled.Checked 更改为 true 或 false,它可以正常工作。 放置断点时检查的值是多少?一定是null,对吧?还会抛出任何 SqlException 或 Exception 吗?我不知道当您尝试运行空查询时会发生什么。最后,view的代码是什么,checkbox实际放在哪里? 我无权访问运行表单的代码,因此无法剪切和粘贴该代码;对不起。这是该 Web 应用程序中的自定义组件。我知道没有例外,当我在调用函数时转储 true 或 false 时,更新函数的效果很好。我打赌复选框控件为空,即使我在提交表单之前选中了复选框。 【参考方案1】:

首先,让我们假设以下情况为真:

布尔值可以是truefalsenull(未分配)。

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

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

因为,如果checked 属性的值是truefalse,代码将正常执行,正如您尝试使用文字真/假值所证明的那样,我们确信实际值为null。语句 2 证明 cbxGramEnabled 在您的代码中此时不包含对象引用。

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

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

【讨论】:

我明白你在说什么,我认为你在正确的轨道上。但是,表单是使用复选框生成的(并由 SQL DB ok 根据我的 SQL 表中的值呈现)。我选中复选框并提交表单,然后这是问题发生的时候,所以它只在更新表单时。从我的冷融合时代开始,在我选择复选框之前应该已经生成了此表单。该复选框位于我服务器上 Web 应用程序的自定义组件中。以这种方式引用复选框控件有什么特别需要做的吗? @NeonBlue 当您回发到服务器时,我认为您实际回发到服务器的内容(使用 http 帖子)仍应包含对该页面中所有控件的引用。不知何故,您的情况并非如此。我认为您应该提供有关您使用的真实技术的更多信息,例如这是 ASP 还是什么?... 现在,我很确定问题不是在服务器和客户端之间当页面被提供时,但是当你得到你的“响应”时客户端和服务器之间(也就是说,应该是一个 http post 的第二个请求)。 不知道原作者用了什么;对不起。我只知道他提供了一种加载带有控件的 .dll 的方法。 @NeonBlue 所以你使用的控件来自那个dll,对吧?但是cbxGramEnabled 的价值从何而来? 您的 代码如何“知道”(编译)cbxGramEnabled 是一个复选框,并且有一个选中的属性?如果您说您根本无法访问表单代码... 我有 ascx 文件:  

以上是关于Web 复选框没有为功能提供价值的主要内容,如果未能解决你的问题,请参考以下文章

Applet

iView的tree组件实现单选功能

访问VBA:从另一个表单获取复选框的价值

没有标签文本的复选框的引导形式水平垂直对齐

在带有复选框的功能之间切换?

如何创建复选框列表?