=x= 🌵 Yachts 前台頁面 OverView - Content Page 後端功能製作。
📌 由於 Yachts 頁面大部分都已製作成主版,我們只需要專注在內容頁的處理 :
protected void Page_Load(object sender, EventArgs e)
{
    //會先跑 Content 頁的 Page_Load 才跑 Master 頁的 Page_Load
    if (!IsPostBack) {
        loadContent();
    }
}
private void loadContent()
{
    //取得 Session 共用 GUID,Session 物件需轉回字串
    string guidStr = Session["guid"].ToString();
    //依 GUID 取得遊艇資料
    SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["TayanaYachtConnectionString"].ConnectionString);
    string sql = "SELECT * FROM Yachts WHERE guid = @guidStr";
    SqlCommand command = new SqlCommand(sql, connection);
    command.Parameters.AddWithValue("@guidStr", guidStr);
    connection.Open();
    SqlDataReader reader = command.ExecuteReader();
    StringBuilder dimensionsTableHtmlStr = new StringBuilder();
    List<RowData> saveRowList = new List<RowData>();
    if (reader.Read()) {
        string yachtModelStr = reader["yachtModel"].ToString();
        string contentHtmlStr = HttpUtility.HtmlDecode(reader["overviewContentHtml"].ToString());
        string loadJson = HttpUtility.HtmlDecode(reader["overviewDimensionsJSON"].ToString());
        string dimensionsImgPathStr = reader["overviewDimensionsImgPath"].ToString();
        string downloadsFilePathStr = reader["overviewDownloadsFilePath"].ToString();
        saveRowList = JsonConvert.DeserializeObject<List<RowData>>(loadJson);
        //渲染型號主要內容
        ContentHtml.Text = contentHtmlStr;
        //渲染 DIMENSIONS 尺寸資料區塊 (第 3 筆開始才是尺寸資料)
        if (saveRowList?.Count > 2) {
            //渲染尺寸表型號標題
            string[] yachtModelArr = yachtModelStr.Split(' ');
            dimensionTitle.InnerText = yachtModelArr[1] + " DIMENSIONS";
            //加入渲染 DIMENSIONS 尺寸資料
            int count = 1;
            foreach (var item in saveRowList) {
                //第1筆是 Video 網址,第2筆是 Download 檔名,從第3筆開始取
                if (count > 2) {
                    dimensionsTableHtmlStr.Append($"<tr><th>{item.SaveItem}</th><td>{item.SaveValue}</td></tr>");
                }
                count++;
            }
            //渲染尺寸表格文字內容
            DimensionsTableHtml.Text = dimensionsTableHtmlStr.ToString();
            //渲染尺寸表格圖片內容,無圖片時不執行
            if (!String.IsNullOrEmpty(dimensionsImgPathStr)) {
                DimensionsImgHtml.Text = $"<td><img alt='{yachtModelStr}' src='upload/Images/{dimensionsImgPathStr}' Width='278px' /></td>";
            }
        }
        else {
            //無尺寸資料則隱藏整個區塊
            dimensionTable.Visible = false;
        }
        //渲染下方 Downloads 區塊
        if (!String.IsNullOrEmpty(downloadsFilePathStr)) {
            string downloadsTitle = saveRowList[1].SaveValue;
            if (String.IsNullOrEmpty(downloadsTitle)) {
                //如果沒設定 PDF 標題文字,則顯示文字改為 PDF 檔名
                downloadsTitle = downloadsFilePathStr;
            }
            //渲染下載連結
            DownloadsHtml.Text = $"<a id='HyperLink1' href='upload/files/{downloadsFilePathStr}' target='blank' >{downloadsTitle}</a>";
        }
        else {
            //無下載連結則隱藏整個區塊
            divDownload.Visible = false;
        }
    }
    connection.Close();
}
//表格欄位 JSON 資料
public class RowData
{
    public string SaveItem { get; set; }
    public string SaveValue { get; set; }
}
📢 可以發現今天的實作內容好像還比昨天的主版內容少,因為主版裡有太多東西而且不同分頁都共用主版,這就是建立主版好用的地方,內容只要注意會出現新型號,資料還不多的時候,會只使用圖文說明,或是尺寸沒有附圖及沒有 PDF 檔案,所以頁面要跟著資料去做版面的變動。