You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:57:02