Maison  >  Questions et réponses  >  le corps du texte

Comment transférer l'identifiant d'un certain élément vers le backend après un événement de clic ?

J'écris mon projet sur une page chargée de lister les films et après avoir cliqué dessus, elle vous reliera à une page où vous pourrez voir toutes les informations sur le film spécifique sur lequel vous avez cliqué, maintenant que j'utilise SQL sur mon base de données, une de mes idées est de transférer l'identifiant de l'élément pressé après avoir attribué l'identifiant correct au lien hypertexte sur lequel vous avez cliqué en fonction du film sur lequel vous avez cliqué. Ma question est de savoir comment obtenir l'identifiant du contenu sur lequel c'est cliqué, le transférer vers le backend afin que je puisse extraire les informations correctes de la base de données en fonction du même identifiant. Voici mon code pour l'instant :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace WebProject
{
    public partial class movie : System.Web.UI.Page
    {
        public string movieLister = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            string fName = "contentDB.mdf";
            string tableName = "moviesTbl";
            string sqlSelect = $"select * from {tableName}";
            DataTable table = Helper.ExecuteDataTable(fName, sqlSelect);
            int length = table.Rows.Count;
            for(int i = 0; i < length; i++)
            {
                movieLister += $"<a href='moviePage.aspx' id='{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>";
            }
            
        }
    }
}

Ce code prend essentiellement une liste de films et attribue l'ID correct lié à la description du film et le renvoie à la page, la seule chose que j'ai besoin de savoir est quoi faire pour obtenir l'ID du film sur lequel on a cliqué afin que je Possibilité de transférer les informations correctes de la base de données vers la page.

J'ai essayé d'utiliser plusieurs ressources, mais aucune ne semble aider.

P粉738046172P粉738046172402 Il y a quelques jours601

répondre à tous(1)je répondrai

  • P粉974462439

    P粉9744624392023-09-14 11:45:07

    Puisque vous n'avez pas publié la page, je suppose que vous venez de cracher les balises movieLister 字符串 {%= movieLister %} 这应该生成 a dans le même format que vous avez utilisé dans votre boucle for, comme ceci :

    <a href='moviePage.aspx' id='{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>
    

    Il y a 2 problèmes avec ce HTML pour ce que vous voulez

    1. Il y a deux balises de fin div sans début. Il s'agit probablement d'une faute de frappe, mais cela perturbera vraiment le moteur de rendu du navigateur (et conduira probablement à un surligneur de syntaxe StackOverflow)
    2. Bien que chaque lien ait un attribut id 属性,但该信息不是您单击链接时将加载的 URL 的一部分,因为它不在 href 中 pointant vers l'ID du film

    Pour résoudre les deux problèmes, je vais mettre à jour la sortie html pour qu'elle ressemble à ceci :

    <a href='moviePage.aspx?id={table.Rows[i]["MOVIEID"]}'> <!-- Update this href to use the id as a query parameter -->
      <div class='movie-container' >
        <img src='{table.Rows[i]["movieImageFile"]}'/>
      <div>
      <img src='favourites.png' /> {table.Rows[i]["rating"]}
    <div> <!-- update this tag -->
    <p>{table.Rows[i]["movieName"]}</p>
    </div>
    </a>
    

    Vous devriez alors pouvoir mettre à jour le gestionnaire de page comme ceci (notez que j'utilise un MacBook et que je ne peux pas vérifier ce code ASPX car .NET Core/5+ n'utilise que Razor Pages) :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    
    namespace WebProject
    {
        public partial class movie : System.Web.UI.Page
        {
            public string movieLister = "";
            protected void Page_Load(object sender, EventArgs e)
            {
                string id = Request["id"];
                string fName = "contentDB.mdf";
                string tableName = "moviesTbl";
    
                string sqlSelect = $"select * from {tableName}";
                if (id.Length() > 0)
                {
                    sqlSelect += $" where id = {id}"
                }
    
                DataTable table = Helper.ExecuteDataTable(fName, sqlSelect);
                int length = table.Rows.Count;
                for(int i = 0; i < length; i++)
                {
                    movieLister += $"<a href='moviePage.aspx?id={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>";
                }
                
            }
        }
    }

    Consignes de sécurité importantes

    Le code ci-dessus montre simplement comment obtenir l'identifiant. En production, je vous recommande fortement de le convertir en int ou de le paramétrer pour éviter des attaques par injection SQL très simples.

    Je recommanderais également fortement de migrer vers les pages .NET Core/5+ et Razor, car elles facilitent la pose de questions comme celle-ci ici et sur Google, car elles sont autonomes et permettent de publier plus facilement le code source complet. Si vous souhaitez en savoir plus sur la page Razor, Tim Corey sur YouTube propose de superbes vidéos pour tous les niveaux

    répondre
    0
  • Annulerrépondre