解决无法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型的错误
2008-01-04 16:14

本文章将解决:
1.解释什么是System.Web.UI.LiteralControl
2.为什么会经常发生法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型……的错误
3.GridView控件中查找模板列的控件(解释Cells和Controls)

在用GridView控件绑定数据时,经常会要将某列转换为模板列,如:
我们在页面中拉一控件GridView,名字:GVData,将其中某列转换为模板列,在这里我们转换的是列“所属单位”,页面模板列部分代码如下:
<asp:TemplateField HeaderText="所属单位">
                    <EditItemTemplate>
                        <asp:HiddenField ID="HDFxz" runat="server" Value='<%#Bind("所属单位") %>' />
                                        <asp:DropDownList ID="DDLxz" runat="server" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# return2dwNAME(Eval("所属单位").ToString()) %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
由上大家可以看到,这个模板列的编辑模板下有两个控件,一个是隐藏域HDFxz,一个是下拉列表DDLxz,然后我们在.cs页面中取下拉列表DDLxz的值,部分代码:
protected void GVData_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
string dwid = ((DropDownList)this.GVData.Rows[e.RowIndex].Cells[2].Controls[1]).SelectedValue;

}
注:以上是修改数据时触发的,我们放到这里只是为了说明问题,不是全部代码,没有实际意义。
我们来解释下,e.RowIndex是取得当前修改数据行的索引值,this.GVData.Rows[e.RowIndex]这个是由当前索引获得当前行,Cells[2]表示是当前行下的第三列(从0开始算起),Controls[1]表示第三列下的第二个控件(也是从0算起),这样解释后我们就可以明白了,dwid 的值应当是要取的是下拉列表框DDLxz的值了(因为下拉列表框在编辑模板中属于第二个控件,这个我们在上面提到过)。
运行后会出错:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.DropDownList”。

可能大家都很纳闷了,再返回去检查一遍,没有数错啊,这时我们就要看看到底什么是System.Web.UI.LiteralControl控件了?
System.Web.UI.LiteralControl:简单的解释是任何不需要在服务器上处理的其他字符串.
这也就是说我们上面的编辑模板存在“不需要在服务器上处理的其他字符串”,那会是什么在搞鬼呢。
经过分析这句话“其他字符串”,然后再看下模板列的源码,怀疑是由于生成了模板列后产生了空格产生的,因为空格也是字符串啊,所以将源码修改为:
    <asp:TemplateField HeaderText="所属单位">
                    <EditItemTemplate><asp:HiddenField ID="HDFxz" runat="server" Value='<%#Bind("所属单位") %>' /><asp:DropDownList ID="DDLxz" runat="server" /></EditItemTemplate>
                    <ItemTemplate>
也就是说把EditItemTemplate标签之间的空格去掉。这时我们再运行,OK,大功告成啊,呵呵,原来真的是空格在搞鬼啊!.net把空格当成了System.Web.UI.LiteralControl了,呵呵!

转载于:https://www.cnblogs.com/heartstill/archive/2011/12/07/2280093.html

解决无法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型的错误...相关推荐

  1. Cannot convert type ‘ASP.login_aspx’ to ‘System.Web.UI.WebControls.Login’的解决方法

    这是Visual Studio 2005的一个Bug,VS进行网站发布(预编译)后,登录页中的"Login"控件和 .NET Framework 中"System.Web ...

  2. login控件authenticate_Login.Authenticate 事件 (System.Web.UI.WebControls) | Microsoft Docs

    验证用户的身份后出现.Occurs when a user is authenticated. public: event System::Web::UI::WebControls::Authenti ...

  3. http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.rowediting.aspx

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.rowediting.aspx gridview的 ...

  4. asp:boundfield html,BoundField 类 (System.Web.UI.WebControls) | Microsoft Docs

    BoundField 类 定义 表示数据绑定控件中以文本形式显示的字段.Represents a field that is displayed as text in a data-bound con ...

  5. 无法将类型为“System.__ComObject”的对象强制转换为类型“ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass

    错误:无法将类型为"System.__ComObject"的对象强制转换为类型"ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFa ...

  6. 无法将类型为“Autodesk.Revit.DB.ElementId”的对象强制转换为类型“System.IConvertible

    原版: ElementId pileID = pileList[0].Id;int intpileID = Convert.ToInt32(pileID);FamilySymbol familysym ...

  7. 无法将类型为“Oracle.DataAccess.Client.OracleParameter”的对象强制转换为类型

    无法将类型为"Oracle.DataAccess.Client.OracleParameter"的对象强制转换为类型"Oracle.DataAccess.Client.O ...

  8. 业务逻辑数据层SqlDataSourcesql的输入参数控件参数System.Web.UI.WebControls.GridView.SelectedValue...

    前台代码   1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CH7_D ...

  9. 分析器错误消息:“xxx.xxx.xxx“不扩展 类“System.Web.UI.Page”,因此此处不允许。

    "/citymap"应用程序中的服务器错误. 分析器错误 说明:在分析向此请求提供服务所需资源时出错.请检查下列特定分析错误 详细信息并适当地修改源文件. 分析器错误消息:&quo ...

最新文章

  1. 为HTML5的未来制定学习计划
  2. 关于“做一个聊天+信息分享客户端”的设想(SNS?)
  3. undefind_undefined什么意思
  4. bucket sort count sort
  5. python全排序算法题_Python的100道经典算法题(1)
  6. Gradle 使用技巧(二) - SO/NDK过滤
  7. Apache之三种工作模式和配置性能优化
  8. 台式计算机哪款好,台式一体机电脑哪款好
  9. freebsd 同步工具unison
  10. Visual Studio2019出现“ 激活远程语言服务器 c#/Visual Basic 语言服务器客户端出错”请运行devenv/log...…“的解决办法
  11. BZOJ2339[HNOI2011]卡农——递推+组合数
  12. 死磕 Fragment 的生命周期
  13. 百分数转换小数 java_Java百分数之间算法 百分数转小数
  14. 决策引擎EngineX平台实践
  15. 自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天
  16. 【UNR #1】合唱队形
  17. 恒流源LM334不恒流
  18. python enumerate_Python enumerate() 函数
  19. 服务器 无线 有线,【干货】有线无线一体化移动网
  20. 我们的23种设计模式(四)

热门文章

  1. Emit应用中的常用技巧
  2. android碎片按钮,Android 碎片(Fragment)
  3. python中range 10 0_如何在python中使用range方法
  4. leetcode算法题--Decode String
  5. acwing算法题--整数分解
  6. linux虚拟网络设备--虚拟机网卡和linux bridge上tap设备的关系(七)
  7. 计算机算法设计与分析二--分治
  8. 手把手教你 Vue 服务端渲染
  9. 2019值得每天闲逛的网站
  10. ios 两个 TableView 之间的联动, TableView 与 CollectionView 之间的联动