Web 复选框没有为功能提供价值
Posted
技术标签:
【中文标题】Web 复选框没有为功能提供价值【英文标题】:Web checkbox not providing value to function 【发布时间】:2012-10-23 15:46:24 【问题描述】:我有一个奇怪的问题,我似乎无法弄清楚。我为在服务器上运行的商业应用程序创建了一个 Web 组件。如果我将cbxGramEnabled.Checked
更改为True
或False
,该函数运行正常并进行更改。但是,如果我离开 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】:
首先,让我们假设以下情况为真:
布尔值可以是
true
;false
或null
(未分配)。
复选框的checked
属性可以具有这些值。
我们也假设
如果
cbxGramEnabled
在运行时在那行代码中包含对Checkbox
实例的引用,则checked
的值永远不会 是null
,除非存在一些奇怪的错误其框架实现。我假设这是一个 .NET 复选框?说明:仅当该对象的构造函数完成运行并将所有属性设置为不同于null
的默认值时,引用才存在。
因为,如果checked
属性的值是true
或false
,代码将正常执行,正如您尝试使用文字真/假值所证明的那样,我们确信实际值为null
。语句 2 证明 cbxGramEnabled
在您的代码中此时不包含对象引用。
本质上,变量cbxGramEnabled
没有实际值,它包含一个null
引用。原因是您的代码是在创建此复选框之前执行的。
通常在 Web 应用程序中,当您的页面仍在加载(创建组件)并且您的代码在页面完全加载之前执行时,就会发生这种情况。这很可能发生在往返服务器之间!我很确定这就是你的问题所在......
【讨论】:
我明白你在说什么,我认为你在正确的轨道上。但是,表单是使用复选框生成的(并由 SQL DB ok 根据我的 SQL 表中的值呈现)。我选中复选框并提交表单,然后这是问题发生的时候,所以它只在更新表单时。从我的冷融合时代开始,在我选择复选框之前应该已经生成了此表单。该复选框位于我服务器上 Web 应用程序的自定义组件中。以这种方式引用复选框控件有什么特别需要做的吗? @NeonBlue 当您回发到服务器时,我认为您实际回发到服务器的内容(使用 http 帖子)仍应包含对该页面中所有控件的引用。不知何故,您的情况并非如此。我认为您应该提供有关您使用的真实技术的更多信息,例如这是 ASP 还是什么?... 现在,我很确定问题不是在服务器和客户端之间当页面被提供时,但是当你得到你的“响应”时客户端和服务器之间(也就是说,应该是一个 http post 的第二个请求)。 不知道原作者用了什么;对不起。我只知道他提供了一种加载带有控件的 .dll 的方法。 @NeonBlue 所以你使用的控件来自那个dll,对吧?但是cbxGramEnabled
的价值从何而来? 您的 代码如何“知道”(编译)cbxGramEnabled
是一个复选框,并且有一个选中的属性?如果您说您根本无法访问表单代码...
我有 ascx 文件: 以上是关于Web 复选框没有为功能提供价值的主要内容,如果未能解决你的问题,请参考以下文章