无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web
来源:互联网 发布:淘宝漏洞券怎么找 编辑:程序博客网 时间:2024/03/29 20:01
它的错误原因和底下的一样,我就直接复制、粘贴了。
无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.DropDow转老韩的:解决System.Web.UI.LiteralControl (2009-04-02 18:02:53)
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_r("所属单位").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了,呵呵。
- 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web
- 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox
- 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.Text
- 出现无法将System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.DropDownList的解决方法
- 解决:GridView提示无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型...
- 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”的解决方法
- 无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。
- 错误:无法将类型为“System.DBNull”的对象强制转换为类型“System.Byte[]”。
- 无法将类型为“System.DBNull”的对象强制转换为类型“System.Byte[]”
- C# 无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。
- 无法将类型为“System.Int32”的对象强制转换为类型“System.String”
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLInputElementClass
- CS0030: 无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls.Login”的解决办法
- 解决“无法将System.Byte[]的对象强制转换为类型System.IConvertible”的错误
- 关于MVC中无法将类型为“System.Int32”的对象强制转换为类型“System.String”的问题。
- Repeater嵌套无法将类型为“System.Data.DataRow”的对象强制转换为类型“System.Data.DataRowView
- 无法将类型为“System.DBNull”的对象强制转换为类型“System.String”分析及解决方案
- Linq集合查询出现无法将类型为“System.Int32”的对象强制转换为类型“System.String”异常
- 一个表由一个数据库导入另一个数据库
- js 设计模式 第四章
- WINDOWS 2008 DNS 解析 WPAD
- 从编程到工程
- 二叉树的遍历以及搜索
- 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web
- 猜数字小游戏(仅限小朋友哦)
- P/INVOKE .NET互操作
- 安装和使用Vim+Taglist+Ctags+cppcomplete+SuperTab
- 坚持得比较好的写代码原则
- [C++对象模型][9]虚继承与虚函数表
- Java中abstract和interface的区别
- Qt__signal_slot 连接的函数类型
- 24.黑马程序员-多态