这是避免回发的好方法吗?

时间:2011-10-30 18:02:34

标签: c# javascript jquery asp.net postback

我正在ASP.NET中创建一个电子商务网站。

对于可供购买的实际产品,我放置了一个带有两个箭头的方框,允许用户修改特定项目的数量。此功能已在Javascript中实现,以避免因通过ASP.NET / C#代码管理此问题而导致的回发。

现在的问题是,我如何存储订购的商品?由于用户可以修改动态选择的数量和产品,我需要弄清楚如何将所选项目传递到另一个aspx页面(用于结账)。

由于要求严格,我不能使用购物车。只是字面上允许用户玩大量的项目,然后一旦按下“结账”按钮,用户就会被引导到他的项目显示的付款页面。

由于项目的选择是在javascript中进行的,我需要找到一种方法将所选项目传递到另一个.aspx页面。

我想过将这些项目存储在一个javascript数据结构中,有点像桌子。产品ID将存储在一个字段中,相应产品的数量将存储在另一个字段中。按下结帐按钮后,此数据结构将传递到.aspx页面,并在那里以C#代码进行处理。

似乎有点复杂,特别是因为如果用户在按“结帐”之前更改所选产品和数量,javascript结构可能会被多次修改。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您可以在javascript代码中使用JSON数据,然后使用GET或POST将其传递到ASP页面。

在服务器端,您可以使用JavaScriptSerializerDataContractJsonSerializer将JSON解析为.net对象。

更新:在JavaScript中,JSON数据应该以这种方式查看:

var orders = [
         {
           "ProductID"  : 123,
           "SomeData": "some additional data if needed",
           "OrderedCount": 3
         },
         {
           "ProductID"  : 321,
           "SomeData": "some new additional data if needed",
           "OrderedCount": 1
         }
     ];

这是一系列订单。

答案 1 :(得分:0)

听起来应该很容易。在包含数量框和复选框的页面上,您只需在它们上面运行迭代器,找到要订购的第一批产品(假设页面尚未显示要订购的产品),然后在该集合中查找数量。然后,您可以序列化这些或以其他方式创建数据对象,并使用GET或POST(无论您喜欢什么)将它们传递到您的ASP页面。

换句话说,有点像你已经拥有的想法,但我不认为创建或管理过于复杂。您的大多数功能都可以重复使用和重复。

根据Jared Farresh的评论,cookies也很有道理。

答案 2 :(得分:0)

根据您提问中的评论,您对“购物车”的担忧似乎与可能与服务器端购物车一起出现的开销有关。

但是,您考虑使用客户端购物车吗?您仍然可以使用购物车隐喻来降低“javascript数据结构的复杂性,有点像表”,而无需持久的后端实现。

simpleCart js是这个概念的开源,轻量级实现。它的工作原理是将数据存储在cookie中。您可以通过查询对象直接检索它,也可以在HTML元素上指定一个类,启动脚本将自动用所请求的值替换该元素的内部HTML。例如,<span class="simpleCart_quantity"></span>将在页面加载后立即将购物车中的商品数量作为其内部HTML。

您可能还想查看我在处理具有类似要求的项目时询问的这篇文章:Open Source client-side Shopping Cart - jQuery/Cookies