【问题标题】:How To change Quantity with ajax asp.net如何使用 ajax asp.net 更改数量
【发布时间】:2014-06-04 14:18:59
【问题描述】:

我有一个装有产品的篮子。我正在尝试通过单击带有 ajax 的 (+) 按钮来增加数量;

我的 ajax 代码;

function sepeteEkle(id) {
      var urunid = id;
      var sessionId = Session.SessionID;
      $.ajax({
          dataType: "json",
          type: "POST",
          contentType: "application/json",
          url: "/Admin/WebService/Control.asmx/QuanInc",
          data: "{'urunid':'" + urunid + "','sessionId':'" + sessionId + "' }",
          success: function () {
              $("#AllCheckOut").load("CheckOut.aspx #AllCheckOut");
          },
          error: function () {
          }
      });
      return false;
  }
  $(document).on('click', '.QuaIncrease', function () {
      var nId = $(this).data("id")
      sepeteEkle(nId);
  });

这是我的中继器;

  <asp:Repeater ID="repBasketDetail" runat="server">
        <ItemTemplate>
            <tr class="cart_table_item">
                    <!-- Remove from cart link -->
                    <td class="product-remove">
                        <a href="http://stylo.senseithemes.com/?page_id=16&amp;remove_item=8d3bba7425e7c98c50f52ca1b52d3735&amp;_n=2e5bf0b319" class="remove" title="Remove this item">×</a>                        </td>

                    <!-- The thumbnail -->
                    <td class="product-thumbnail">
                        <a href="ShopDetail.aspx?Id=<%#Eval("Id")%>" ><img width="100" height="130" src="<%#Eval("ProductPic") %>" class="attachment-shop_thumbnail wp-post-image" alt="T_7_front"></a>                     </td>

                    <!-- Product Name -->
                    <td class="product-name">
                        <a href="ShopDetail.aspx?Id=<%#Eval("Id")%>"><%#Eval("ProductName") %></a>                          
                        <div class="clear"></div>

                        <!-- Product price -->
                        <div class="product-price">
                            <span class="amount"><%#Eval("ProductPrice") %> TL</span>                           </div>
                    </td>

                    <!-- Quantity inputs -->
                    <td class="product-quantity">
                        <div class="quantity buttons_added"><input type="button" value="-" class="minus"><input type="number" name="cart[8d3bba7425e7c98c50f52ca1b52d3735][qty]" step="1" min="" max="" value="<%#Eval("ProductQuantity") %>" size="4" title="Qty" class="input-text qty text" maxlength="12"><input type="button" class="QuaIncrease"  data-id=<%#Eval ("Id") %> value="+" ></div>                     </td>

                    <!-- Product subtotal -->
                    <td class="product-subtotal">
                        <span class="amount">


                            <%# Eval("ProductPrice") %>
                        </span>                                        </td>
                </tr>
             </ItemTemplate>

这是我要增加的网络服务;

[WebMethod]
    public void QuanInc(int urunid, string SessionID)
    {
        using (Models.DermabonEntities db = new Models.DermabonEntities())
        {
            var product = db.Product.Find(urunid);
            if (product != null)
            {
                var userIp = SessionID;


                Basket basket = db.Basket.FirstOrDefault(x => x.UserId == userIp && x.ProductId == urunid);
                if (basket != null)
                {

                    basket.ProductQuantity++;

                }

                db.SaveChanges();
            }

        }

    }

所以我没有登录的东西。我创建随机会话编号和字母以获取每个浏览器的用户。 urunid = producId,来自产品表。所以现在我试图让每次点击(+)值按钮的数量增加 1,就像你在转发器中看到的那样。但它不起作用我还需要减少

mySessionId = '<%=Session.SessionID%>';
      alert(mySessionId);

所以我可以提醒会话但仍然不能增加数量

【问题讨论】:

  • 它不工作是什么意思,是调用没有到达网络方法还是数据库没有发生变化?
  • 好吧,什么都没有发生,没有错误,但数据库中没有任何变化
  • 我使用几乎相同的代码添加到购物车按钮,它增加了数量,但这里没有。
  • 如果设置断点,你看不到 /Admin/WebService/Control.asmx/QuanInc 被调用?
  • 你不能直接在 javascript 中编写 .NET 属性,你需要告诉编译器这些是 .NET 属性而不是 javascript:var sessionId = '&lt;%= Session.SessionID %&gt;';

标签: jquery asp.net ajax web-services


【解决方案1】:

Session.SessionID 是来自 asp 脚本的东西,因此您需要将它们包含在这样的 asp 标签中

mySessionId= '<%=Session.SessionID%>'; 

而不是

 var sessionId = Session.SessionID;

因此,控件永远不会到达您的 ajax 调用,您会知道它的进一步处理流程。

快乐编码:)

【讨论】:

  • Uncaught TypeError: Cannot read property 'querySelector' of null plugins.js?ver=1:30 NLForm plugins.js?ver=1:30 (anonymous function) plugins.js?ver=1: 186 Uncaught TypeError: undefined is not a function custom.js?ver=1:106 (匿名函数) custom.js?ver=1:106 c jquery.js?ver=1.10.2:3 p.fireWith jquery.js? ver=1.10.2:3 x.extend.ready jquery.js?ver=1.10.2:3 q 现在得到这些
  • 我现在可以获取会话的 ID,但数量仍然没有任何变化。知道为什么它不起作用吗?我不认为网络服务代码有问题
  • @user3703153:您检查了两件事 1. 像这样在您的 ajax 请求中将数据传递给远程服务,var urunId = id; var sessId = Session.SessionID; $.ajax({ ..., data: {urunid:urunId,sessionId:sessId} }); 2. 尝试在 ajax 请求中给出绝对 url 而不是相对 url。
【解决方案2】:

尝试在浏览器开发工具(IE 和 Chrome 上的 F12,Firefox 上的 Firebug)或 Fiddler 中使用网络嗅探器,然后运行此代码。调用 /Admin/WebService/Control.asmx/QuanInc 时是否收到 404 或 500 错误?此服务方法的路径可能无效 (404),或者对服务的调用出错 (500)。

【讨论】:

  • 每次我点击按钮时都会显示 Uncaught ReferenceError: Session is not defined
  • 将你的 JS 改为 。您的 JS 认为 Session 是一个已定义的对象,但它不是。这也假设 JS 直接在您的 ASP.NET ASPX 文件中,如果您在单独的 .js 文件中有此 JS 代码,那么这会变得有点棘手..
  • 像这样; var sessionId =
  • 哦.. 做到这一点,如果你得到这个工作,我不建议你在客户端标记中放置一个用户会话 ID,这就是会话劫持发生的方式......如果你需要去这条路线,加密值并存储在隐藏变量或其他东西中,然后在调用您的服务方法时传递该值并解密..
  • 好的,记住这一点。完成后会尝试隐藏
猜你喜欢
  • 2018-08-24
  • 1970-01-01
  • 2015-08-15
  • 2011-02-26
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多