首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

基於 DotNetNuke 的動態表單支援(一):架構設計與動態載入用戶控件

     編輯:關於ASP.NET

在使用 DotNetNuke 過程中,我對其 UserDefinedTable (UDT) 模組深感興趣,並深入研究其資料結構與程式碼。UDT 的開發模式極具參考價值,雖然它已支援豐富的資料類型、合理的結構設計與查詢機制,但在「零碎的介面客製化需求」(如標題顏色、Banner、字體調整等)上擴展性不足。

為了解決此問題,我設計了一套完全由使用者定義介面的動態表單機制:美工以 Dreamweaver 設計完整 HTML 頁面,僅在需動態互動處插入特定標記(Tag),模組再解析標記並注入對應伺服器控件。這樣即可將介面工作徹底交給美工,無需程式人員介入。

核心技術實現

ASP.NET 原生支援執行期動態載入用戶控件 (.ascx)。對美工而言,.ascx 可視為 HTML 檔,設計完成後更改副檔名即可。每個動態表單對應一個唯一的 .ascx 檔案。

載入完成後,透過遞迴遍歷控件集合,尋找預留的 PlaceHolder(ID 以 __ 開頭),並根據欄位定義動態建立並加入對應控件:

Dim uc As Control
Dim strFormatFileName = "/Portals/0/RedstartForm/371_1.ascx"
uc = CType(Page.LoadControl(strFormatFileName), Control)

For Each c As Control In uc.Controls
  If c.GetType.ToString().Equals("System.Web.UI.WebControls.PlaceHolder") Then
    Dim strControlName As String = c.ID.Replace("__", "")
    For Each objField As RedstartFormFieldInfo In colFields
      If strControlName.ToUpper() = objField.FieldName.ToUpper() Then
        objCtl = MyControls.Add(objField.FieldTitle, objField.FieldType, objField.KeyID, objField.FieldName, _
          PublicFunction.FormatParameter(objField.DefaultValue, strRowID, strParentID, strRelateRowID), _
          objField.Required, bEnabled, objField.IsReadOnly, PublicFunction.FormatParameter(objField.Extended, strRowID, strParentID, strRelateRowID), _
          objField.CssEnable, objField.CssDisable)
        c.Controls.Add(objCtl)
        Exit For
      End If
    Next
  End If
Next

此架構實現了「介面設計與業務邏輯解耦」,大幅提升開發效率與維護彈性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved