色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

DynamicControl/DynamicField 例外的解決

  在使用 DynamicField / DynamicControl 時,經常在PostBack時,會出現一個例外:

  The DynamicControl/DynamicField needs to exist inside a data control that is bound to a data source that supports Dynamic Data.

  中文為:

  綁定到支持動態數據的數據源的數據控件內必須存在 DynamicControl/DynamicField

 

  具體發生原因暫時不太清楚,估計是PostBack的事件流程和頁面正常加載不一致。當PostBack后,數據控件(如DetailsView, GridView, ListView 等)在狀態加載時, 會把所有的 Fileds或Columns初始化一次,而這一次,由于數據源沒有綁定,所以找不到相關的 MetaTable。在這種情況下,DynamicControl 和 DynamicField 都是丟出上述的例外。

  不過,從應用上來看,如果數據綁定做的合理的話(比如在InitComplete以前綁定),是不會出現這個問題的。但是一旦出了這個問題,解決起來就比較麻煩了,因為常常有些人習慣于在Load中綁定數據,要修改的話,常常會牽連一大堆的代碼。希望對這個問題比較了解的朋友多多指教。

  目前我采用的方法,可以不改變原有的綁定流程,可以跟以前的Eval、Bind等一樣使用,可以讓大家試試。在使用中如有發現有Bug,請發郵件告訴我。因為我最近幾個月都在應用 DynamicFieldTemplates 來開發應用程序,對這些問題比較關心。

  使用這種方法,可以讓一些程序經驗不足的人,也能避開這個錯誤。

  我分別從DynamicControl 和 DynamicField 繼承了新的類 DdControl 和 DdField,然后在初始化時,判斷是否存在MetaTable,如果不存在,則不再初始化。然后,程序中原本所有采用 DynamicControl/DynamicField的地方,都換成DdControl/DdField。

  DdControl/DdField的源碼如下:

namespace Common
{
    
public class DdField : DynamicField
    {
        
public override void InitializeCell(System.Web.UI.WebControls.DataControlFie
ldCell cell, System.Web.UI.WebControls.DataControlCellType cellType, System.
Web.UI.WebControls.DataControlRowState rowState, 
int rowIndex)
        {
            
// HACK: Fix bug for: The DynamicControl/DynamicField needs to exist inside a data control that is bound to a data source
that supports Dynamic Data.

            if (base.Control.FindMetaTable() == null)
                
return;

            
base.InitializeCell(cell, cellType, rowState, rowIndex);
        }

    }
}

NET技術DynamicControl/DynamicField 例外的解決,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 积石山| 阿巴嘎旗| 凤凰县| 苏尼特右旗| 黄陵县| 青州市| 弥勒县| 乌审旗| 三穗县| 贡觉县| 长宁县| 建水县| 周宁县| 肇东市| 兰坪| 贺兰县| 紫金县| 常宁市| 三明市| 河西区| 新干县| 花莲市| 阳新县| 灯塔市| 中山市| 察雅县| 富平县| 北宁市| 沛县| 宁南县| 锦屏县| 阳西县| 乌兰浩特市| 呈贡县| 长宁区| 合山市| 铅山县| 枣强县| 西林县| 四子王旗| 格尔木市|