=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 档案,所以页面要跟着资料去做版面的变动。
这次有幸能藉由铁人赛重新认识及学习Arm的相关技术, 以下为这次参赛的课题以及时程(会再陆续更新完成...
全民疯AI系列2.0 第13届iT邦帮忙铁人赛 前言 哈罗大家好我是10程序中的10!我是上一届铁人...
前言 上一篇文章介绍了 ConfigMap 以及 Secrets 以及如何建立,接下来就要介绍如何正...
学习进度 资料结构 泛型 通配字元 Android Studio RecyclerView Recy...
这是 Roblox 从零开始系列,入门章节的第八个单元,今天你将学会如何透过脚本来让玩家掉到岩浆上之...