asp.net WebForm中的购物篮

时间:2019-02-20 13:24:26

标签: c# asp.net webforms

我正在建立一个出售一些书籍的小型网站,并且需要实现一个简单的解决方案以将书籍添加到购物篮(可能是Session [“ buylist”]),并允许用户通过电子邮件下订单。 / p>

在一页中,我有一个gridView,其中填充了SQL数据库中的dataReader,并且能够在左侧添加一列图像,该图像调用c#中采用行/列ISBN的方法并将其添加到Session中的方法[“购买清单”]。

到目前为止很好。

在另一页中,我有一小段带有html div和一个图像作为购买按钮,但“ onClick”事件仅适用于Javascript。我尝试使用ISBN变量调用javascript并显示一些警报消息。 我可以将Session [“ variable”]添加到javascript内部的“ var暂时”变量中,但无法将结果分配回C#Session [“ buyList”]

在HTML中,我无法直接通过“ onClick事件”从图像调用c#方法。

<script type="text/javascript">
   function fonction_ajouterPanier(ISBN) {

      window.alert('<%= Session["PanierCommande"] %>');
      var temp = '<%= Session["PanierCommande"] %>';
      temp += (" " + GenCod);

      window.alert(ISBN);

      '<%= Session["PanierCommande"] %>' =  temp;

   }
</script>

是否有一种最简单的方法来创建保留在我可以轻松重用的会话页面上的项目(整数)列表?

编辑:

我尝试使用WebMethod,但是javascript内部的代码似乎未被识别:

 [WebMethod]
      protected void Fonction_ajouterPanier(string a)
      {
         Session["PanierCommande"] += a;
         Response.Write(Session["PanierCommande"]);
      }

<script type="text/javascript">
   function fonction_ajouterPanier(GenCod) {

      window.alert('<%= Session["PanierCommande"] %>');
      var temp = '<%= Session["PanierCommande"] %>';
      temp += (" " + GenCod);

      window.alert(temp);

      PageMethods.CSHARP_FunctionName(temp);

   }
</script>

2 个答案:

答案 0 :(得分:0)

我将本示例放在一起,为您提供了想要实现的目标的起点,希望这有助于您更好地了解如何使用该技术。

在您的WebForm中,确保您拥有ScriptManager(在form标记内)。

<asp:ScriptManager runat="server" EnablePageMethods="true"></asp:ScriptManager>

然后像这样更新您的fonction_ajouterPanier函数:

<script type="text/javascript">
    function fonction_ajouterPanier(ISBN) {
        PageMethods.Fonction_ajouterPanier(ISBN, function (result) {
            for (var item of result) {
                window.alert(item);
            }
        });
    }
</script>

然后在html中的某处添加以下两个按钮进行测试:

<button type="button" onclick="fonction_ajouterPanier('code1')">Add code1</button>
<button type="button" onclick="fonction_ajouterPanier('code2')">Add code2</button>

现在,在页面后面的代码中,像这样更新Fonction_ajouterPanier方法:

[WebMethod]
public static List<string> Fonction_ajouterPanier(string isbn)
{
    var session = HttpContext.Current.Session;

    var list = (List<string>)session["PanierCommande"];

    if (list == null)
    {
        list = new List<string>();
        session["PanierCommande"] = list;
    }

    list.Add(isbn);

    return list;
}

还要确保在文件后面页面代码的顶部具有以下用途:

using System.Collections.Generic;
using System.Web;
using System.Web.Services;

这会将会话变量PanierCommande初始化为List<string>,并在您单击提供的任何按钮时向其中添加一些代码。

您可以在此处找到有关如何使用AJAX页面方法的更多详细信息: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-getting-started/aspnet-ajax/understanding-asp-net-ajax-web-services#creating-and-using-page-methods

答案 1 :(得分:0)

通过使用以前用于其他事物的相同解决方案,我能够解决自己的难题。 只需在url中创建一个参数并检测是否使用了该参数,然后就可以运行所需的任何代码,并在更新后的结果1秒后刷新页面。

 string ajouterPanier = Request.QueryString["ajouterPanier"];
               if (ajouterPanier != null)
               {
                  Session["PanierCommande"] += " " + ajouterPanier;
                  Response.AddHeader("REFRESH", "1;URL=misesenvente.aspx");
               }