無法將類型為“System.Web.UI.WebControls.HiddenField”的對象強(qiáng)制轉(zhuǎn)換為類型的錯誤的解決
更新時間:2011年12月23日 00:52:39 作者:
無法將類型為“System.Web.UI.WebControls.HiddenField”的對象強(qiáng)制轉(zhuǎn)換為類型的錯誤的解決方法
本文章將解決:
1.解釋什么是System.Web.UI.LiteralControl
2.為什么會經(jīng)常發(fā)生法將類型為“System.Web.UI.WebControls.HiddenField”的對象強(qiáng)制轉(zhuǎn)換為類型……的錯誤
3.GridView控件中查找模板列的控件(解釋Cells和Controls)
在用GridView控件綁定數(shù)據(jù)時,經(jīng)常會要將某列轉(zhuǎn)換為模板列,如:
我們在頁面中拉一控件GridView,名字:GVData,將其中某列轉(zhuǎn)換為模板列,在這里我們轉(zhuǎn)換的是列“所屬單位”,頁面模板列部分代碼如下:
<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;
}
注:以上是修改數(shù)據(jù)時觸發(fā)的,我們放到這里只是為了說明問題,不是全部代碼,沒有實(shí)際意義。
我們來解釋下,e.RowIndex是取得當(dāng)前修改數(shù)據(jù)行的索引值,this.GVData.Rows[e.RowIndex]這個是由當(dāng)前索引獲得當(dāng)前行,Cells[2]表示是當(dāng)前行下的第三列(從0開始算起),Controls[1]表示第三列下的第二個控件(也是從0算起),這樣解釋后我們就可以明白了,dwid 的值應(yīng)當(dāng)是要取的是下拉列表框DDLxz的值了(因?yàn)橄吕斜砜蛟诰庉嬆0逯袑儆诘诙€控件,這個我們在上面提到過)。
運(yùn)行后會出錯:無法將類型為“System.Web.UI.LiteralControl”的對象強(qiáng)制轉(zhuǎn)換為類型“System.Web.UI.WebControls.DropDownList”。
可能大家都很納悶了,再返回去檢查一遍,沒有數(shù)錯啊,這時我們就要看看到底什么是System.Web.UI.LiteralControl控件了?
System.Web.UI.LiteralControl:簡單的解釋是任何不需要在服務(wù)器上處理的其他字符串.
這也就是說我們上面的編輯模板存在“不需要在服務(wù)器上處理的其他字符串”,那會是什么在搞鬼呢。
經(jīng)過分析這句話“其他字符串”,然后再看下模板列的源碼,懷疑是由于生成了模板列后產(chǎn)生了空格產(chǎn)生的,因?yàn)榭崭褚彩亲址。詫⒃创a修改為:
<asp:TemplateField HeaderText="所屬單位">
<EditItemTemplate><asp:HiddenField ID="HDFxz" runat="server" Value='<%#Bind("所屬單位") %>' /><asp:DropDownList ID="DDLxz" runat="server" /></EditItemTemplate>
<ItemTemplate>
也就是說把EditItemTemplate標(biāo)簽之間的空格去掉。這時我們再運(yùn)行,OK,大功告成啊,呵呵,原來真的是空格在搞鬼啊!.net把空格當(dāng)成了System.Web.UI.LiteralControl了,呵呵!
1.解釋什么是System.Web.UI.LiteralControl
2.為什么會經(jīng)常發(fā)生法將類型為“System.Web.UI.WebControls.HiddenField”的對象強(qiáng)制轉(zhuǎn)換為類型……的錯誤
3.GridView控件中查找模板列的控件(解釋Cells和Controls)
在用GridView控件綁定數(shù)據(jù)時,經(jīng)常會要將某列轉(zhuǎn)換為模板列,如:
我們在頁面中拉一控件GridView,名字:GVData,將其中某列轉(zhuǎn)換為模板列,在這里我們轉(zhuǎn)換的是列“所屬單位”,頁面模板列部分代碼如下:
<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;
}
注:以上是修改數(shù)據(jù)時觸發(fā)的,我們放到這里只是為了說明問題,不是全部代碼,沒有實(shí)際意義。
我們來解釋下,e.RowIndex是取得當(dāng)前修改數(shù)據(jù)行的索引值,this.GVData.Rows[e.RowIndex]這個是由當(dāng)前索引獲得當(dāng)前行,Cells[2]表示是當(dāng)前行下的第三列(從0開始算起),Controls[1]表示第三列下的第二個控件(也是從0算起),這樣解釋后我們就可以明白了,dwid 的值應(yīng)當(dāng)是要取的是下拉列表框DDLxz的值了(因?yàn)橄吕斜砜蛟诰庉嬆0逯袑儆诘诙€控件,這個我們在上面提到過)。
運(yùn)行后會出錯:無法將類型為“System.Web.UI.LiteralControl”的對象強(qiáng)制轉(zhuǎn)換為類型“System.Web.UI.WebControls.DropDownList”。
可能大家都很納悶了,再返回去檢查一遍,沒有數(shù)錯啊,這時我們就要看看到底什么是System.Web.UI.LiteralControl控件了?
System.Web.UI.LiteralControl:簡單的解釋是任何不需要在服務(wù)器上處理的其他字符串.
這也就是說我們上面的編輯模板存在“不需要在服務(wù)器上處理的其他字符串”,那會是什么在搞鬼呢。
經(jīng)過分析這句話“其他字符串”,然后再看下模板列的源碼,懷疑是由于生成了模板列后產(chǎn)生了空格產(chǎn)生的,因?yàn)榭崭褚彩亲址。詫⒃创a修改為:
<asp:TemplateField HeaderText="所屬單位">
<EditItemTemplate><asp:HiddenField ID="HDFxz" runat="server" Value='<%#Bind("所屬單位") %>' /><asp:DropDownList ID="DDLxz" runat="server" /></EditItemTemplate>
<ItemTemplate>
也就是說把EditItemTemplate標(biāo)簽之間的空格去掉。這時我們再運(yùn)行,OK,大功告成啊,呵呵,原來真的是空格在搞鬼啊!.net把空格當(dāng)成了System.Web.UI.LiteralControl了,呵呵!
相關(guān)文章
ASP.NET WebAPI2復(fù)雜請求跨域設(shè)置的方法介紹
這篇文章主要給大家介紹了關(guān)于ASP.NET WebAPI2復(fù)雜請求跨域設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用ASP.NET具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07asp.net實(shí)現(xiàn)取消頁面表單內(nèi)文本輸入框Enter響應(yīng)的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)取消頁面表單內(nèi)文本輸入框Enter響應(yīng)的方法,結(jié)合實(shí)例形式分析了asp.net文本框Enter響應(yīng)的原理與取消Enter響應(yīng)的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11.NET中實(shí)現(xiàn)對象數(shù)據(jù)映射示例詳解
這篇文章主要為大家介紹了.NET中實(shí)現(xiàn)對象數(shù)據(jù)映射示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10ASP.NET WebAPI連接數(shù)據(jù)庫的方法
這篇文章主要為大家詳細(xì)介紹了ASP.NET WebAPI連接數(shù)據(jù)庫的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08詳解.NET6下的Modbus通訊和數(shù)據(jù)庫記錄
本文主要介紹了.NET6下的Modbus通訊和數(shù)據(jù)庫記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04ASP.NET中控件的EnableViewState屬性及徹底禁用
如果我們在開發(fā)Web應(yīng)用程序時,某些控件是不需要接受用戶的操作或只需要接受一次操作的時候,我們可以將這些控件的EnableViewState屬性改為false,這樣可以優(yōu)化我們的程序,提高網(wǎng)絡(luò)訪問的速度。2016-06-06一步步教你在Asp.net Mvc中使用UEditor編輯器
大家都知道ueditor是百度編輯器,目前使用也比較廣泛,下面這篇文章主要是通過一步步的步驟教大家在Asp.net Mvc中使用UEditor編輯器,需要的朋友可以參考借鑒,下面來一起看看吧。2016-12-12