關於.net實現網站模板機制(非標籤替換)

iDotNetSpace發表於2009-01-13
到很多.net的程式實現模板都是使用標籤替換,和ASP PHP等沒有區別,如dxbbs等.

    但是,大家都知道,在.net中,一個頁面是由幾個部分類組成:xxx.aspx.cs,xxx.cs,xxx.desinger.cs.

    那麼,我們就可以把一個aspx檔案當著模板,使用urlrewriter與反射來實現模板更換.如:一個列表頁裡面規定必須有一個id叫做rpt的repeater控制元件,模板在製作時就加上這個控制元件.而內容頁的話,可以使用反射,把資料庫實體物件直接繫結到頁面控制元件,方法如下:

 

/// 
/// 將控制元件繫結到物件
/// 
/// 物件
/// 控制元件容器
public static void BindControlsToObject(object obj, Control container)
{
    
if (obj != null)
    {
        PropertyInfo[] properties 
= obj.GetType().GetProperties();
        
foreach (PropertyInfo info in properties)
        {
            
try
            {
                Control control 
= container.FindControl(info.Name);
                
if (control != null)
                {
                    
if (control is ListControl)
                    {
                        ListControl control2 
= (ListControl)control;
                        
if (control2.SelectedItem != null)
                        {
                            info.SetValue(obj, Convert.ChangeType(control2.SelectedItem.Value, info.PropertyType), 
null);
                        }
                    }
                    
else if (control is CheckBox)
                    {
                        CheckBox box 
= (CheckBox)control;
                        info.SetValue(obj, Convert.ChangeType(box.Checked, info.PropertyType), 
null);
                    }
                    
else
                    {
                        PropertyInfo[] controlPropertiesArray 
= control.GetType().GetProperties();
                        
bool flag = false;
                        flag 
= FindAndGetControlProperty(obj, info, control, controlPropertiesArray, "Checked"typeof(bool));
                        
if (!flag)
                        {
                            flag 
= FindAndGetControlProperty(obj, info, control, controlPropertiesArray, "Text"typeof(string));
                        }
                        
if (!flag)
                        {
                            flag 
= FindAndGetControlProperty(obj, info, control, controlPropertiesArray, "Value"typeof(string));
                        }
                        
if (!flag)
                        {
                            flag 
= FindAndGetControlProperty(obj, info, control, controlPropertiesArray, "SelectedDate"typeof(DateTime));
                        }
                    }
                }
            }
            
catch
            {
            }
        }
    }
}

同時,使用URLREWRITER,不同的模板時指向不同的ASPX頁面,ASPX頁面的PAGE節的Inherits當然要寫好.有點像微軟的MVC的那種模式.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-536618/,如需轉載,請註明出處,否則將追究法律責任。

相關文章