Pages

2015-07-08

WebForm更新MasterPage的推薦方式

ASP.NET下的MasterPage一般用來作前端UI框架的,真正的ContentPage才是主要寫該頁程序的地方。這兩種Page在CodeBehind的方式,長得都一樣,因此初學者很容易在各自的頁面CS裏,寫獨立的DB連線及程序(Page_Load),這樣的作法除了多浪費一倍頁面物件所需建立的時間及效能損耗下,Master與Content也不容易作互動。

頁面的執行Trigger都是決定在ContentPage裏,因此要改MasterPage上的控制項方式為:

if (this.Master != null)
{
Literal menu = this.Master.FindControl("MyControldId") as Literal;
if (menu != null)
{
menu.Text = "ABC";
}
}

這些控制項本身就在MasterPage有始初化操作,又被刷值了一次,N個控制項得FindControl()集合N次,十分冗雜又效能差的。其實MasterPage.cs裏不要去連資料庫,只需要寫個更新UI的Method函式即可:

public void Menu_UpdateText(string text, Entity items)
{
this.lblPageTitle.Text = "MasterTitle";
this.ListView1.DataSource = items;
this.ListView1.DataBind();
}
在ContentPage.cs裏,使用以下方式呼叫MasterPage內的函式進行刷新:
if (this.Master != null)
{
var masterPage = this.Master as MasterPageType;;
if (masterPage != null)
{
masterPage.Menu_UpdateText("ABC", dbItems);;
}
}
如此方式,即可既簡單又高效率地在MasterPage與ContentPage間繫結資料項了,一切由ContentPage來控制。

No comments: