ASP.NET电影列表页:点击元素后如何将ID传递至后端?
解决方案
你现在的问题是把电影ID放在了a标签的id属性里,但这个属性没法通过页面跳转传递给后端。正确的做法是把MOVIEID作为URL查询参数附加到跳转链接上,然后在详情页后端读取这个参数来查询数据。
1. 修改电影列表页面的链接生成代码
把循环里生成a标签的代码改成下面这样,把MOVIEID放到href的查询参数中:
movieLister += $"<a href='moviePage.aspx?movieId={table.Rows[i]["MOVIEID"]}' ><div class='movie-container' ><img src='{table.Rows[i]["movieImageFile"]}'/><div><img src='favourites.png' /> {table.Rows[i]["rating"]}</div><p>{table.Rows[i]["movieName"]}</p></div></a>";
这里移除了a标签上的id属性(留着也不影响,但核心是添加?movieId=xxx参数),用户点击链接时,浏览器会自动带着movieId参数跳转到详情页。
2. 在详情页(moviePage.aspx)后端接收参数并查询数据
打开moviePage.aspx.cs,在Page_Load方法里读取URL参数,再用这个ID查询数据库:
protected void Page_Load(object sender, EventArgs e) { // 读取URL中的movieId参数 if (!string.IsNullOrEmpty(Request.QueryString["movieId"])) { // 转换为整数(如果你的MOVIEID是整数类型) if (int.TryParse(Request.QueryString["movieId"], out int movieId)) { string fName = "contentDB.mdf"; string tableName = "moviesTbl"; // 必须用参数化查询防止SQL注入! string sqlSelect = $"select * from {tableName} where MOVIEID = @MovieId"; // 根据你的Helper类实现,调整参数化查询的调用方式 // 示例: // DataTable movieDetail = Helper.ExecuteDataTable(fName, sqlSelect, new SqlParameter("@MovieId", movieId)); // 把查询到的数据绑定到页面控件,比如: // movieNameLabel.Text = movieDetail.Rows[0]["movieName"].ToString(); } else { // 处理参数不是有效数字的情况,比如提示"无效的电影ID" } } else { // 处理未传递movieId的情况,比如跳回电影列表页 Response.Redirect("movie.aspx"); } }
关键安全提醒
绝对不能直接把Request.QueryString["movieId"]拼到SQL语句里,这会引发SQL注入漏洞。一定要用参数化查询,把电影ID作为参数传递给SQL命令。如果你的Helper.ExecuteDataTable当前不支持参数化,需要修改这个方法来接受SqlParameter数组这类参数形式。
内容的提问来源于stack exchange,提问作者schnitzel_prog
相关产品推荐
相关产品推荐

