Správičky 2 276 Blogy 579 Fórum 14 090

Prehľad diskusie

photo
Vymazavanie poloziek z kosika
newbie
3. 3. 2010 8:48:38
photo
RE: Vymazavanie poloziek z kosika
T
3. 3. 2010 10:55:54
photo
RE: Vymazavanie poloziek z kosika
newbie
3. 3. 2010 11:15:06
photo
RE: Vymazavanie poloziek z kosika
Liero
3. 3. 2010 12:28:30
photo
RE: Vymazavanie poloziek z kosika
newbie
3. 3. 2010 12:36:27
photo
RE: Vymazavanie poloziek z kosika
T
3. 3. 2010 12:49:27
photo
RE: Vymazavanie poloziek z kosika
newbie
3. 3. 2010 13:27:23
photo
RE: Vymazavanie poloziek z kosika
vlko
3. 3. 2010 13:48:15
photo
RE: Vymazavanie poloziek z kosika
duracellko
3. 3. 2010 15:13:04
photo
RE: Vymazavanie poloziek z kosika
vlko
3. 3. 2010 15:23:34
photo
RE: Vymazavanie poloziek z kosika
newbie
3. 3. 2010 17:50:26
photo
RE: Vymazavanie poloziek z kosika
T
3. 3. 2010 18:32:51
photo
RE: Vymazavanie poloziek z kosika
Siro
3. 3. 2010 18:42:58
photo
RE: Vymazavanie poloziek z kosika
newbie
12. 3. 2010 7:13:07
photo
RE: Vymazavanie poloziek z kosika
T
12. 3. 2010 11:14:28

Vymazavanie poloziek z kosika

photo
newbie
3. 3. 2010 8:48:38
Body: 30
Najaktívnejší č.: 172

Vymazavanie poloziek z kosika

Ahojte,

mam implementovanu ASP.NET 2.0 web site, vramci ktorej pouzivam nakupny kosik. Na uchovavanie poloziek v kosiku je vyuzita funkcnost Profile-ov ASP.NET a serializujem polozky kosika ako binarne data. Tieto polozky su riesene ako kolekcia Dictionary<string, ShoppingCartItem>. Ako ulozisko profilov mam DB SQL 2000.
A teraz k problemu :-)
Stava sa, ze pri vlozeni novej polozky do kosika, je tato sice pridana, ale niektora z predchadzajucich z neho zmizne. Skumal som to, testoval a na nic neprisiel. Moze to byt nejakou chybou v serializacii toho kosika? Alebo zle pouzity typ collection?

[Reakcia]

photo
T
3. 3. 2010 10:55:54
Body: 16750
Najaktívnejší č.: 2

RE: Vymazavanie poloziek z kosika

Ahoj. Skus urobit zjednoduseny priklad a posli. Co je klucom v tom disctionary?

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
newbie
3. 3. 2010 11:15:06
Body: 30
Najaktívnejší č.: 172

RE: Vymazavanie poloziek z kosika

Kod toho kosika vypada zjednodusene cca takto:
[Serializable]
    public
class ShoppingCartItem
    
{
      
//Properties, Constructor
    }


[Serializable]
    public
class ShoppingCart
    
{
      private Dictionary
<string, ShoppingCartItem> _items = new Dictionary<string, ShoppingCartItem>();
        public ICollection Items
        
{
            get
{ return _items.Values; }
        }


      public
void InsertItem(string id, string title, decimal unitPrice)
        
{
            if (_items.ContainsKey(id))
                _items[id].Quantity
+= 1;
            else
                _items.Add(id,
new ShoppingCartItem(id, title, unitPrice));
        }


      public
void DeleteItem(string id)
        
{
            if (_items.ContainsKey(id))
            
{
                _items.Remove(id);
            }

        }


      public
void UpdateItemQuantity(string id, decimal quantity)
        
{
            if (_items.ContainsKey(id))
            
{
                ShoppingCartItem item
= _items[id];
                item.Quantity
= quantity;
                if (item.Quantity
<= 0)
                    _items.Remove(id);
            }

        }


      public
void Clear()
        
{
            _items.Clear();
        }


}


public class CurrentUserShoppingCart
    
{
        public
static ICollection GetItems()
        
{
            return (HttpContext.Current.Profile
as ProfileCommon).ShoppingCart.Items;
        }


        public
static void DeleteItem(string id)
        
{
            (HttpContext.Current.Profile
as ProfileCommon).ShoppingCart.DeleteItem(id);
        }


        public
static void DeleteProduct(string id)
        
{
            (HttpContext.Current.Profile
as ProfileCommon).ShoppingCart.DeleteProduct(id);
        }

    }
Vo web config mam nastavene pre kosik a jeho uchovavanie v profile toto:
<profile defaultProvider="ProfileProviderName">
<providers>
<add name="ProfileProviderName" connectionStringName="ConnStringName" applicationName="AppName" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
<properties>
 
<add name="ShoppingCart" type="ShoppingCart" serializeAs="Binary" />
</properties>
</profile>
Klucom v Dictionary je id tovaru.

[Reakcia]

photo
Liero
3. 3. 2010 12:28:30
Body: 3800
Najaktívnejší č.: 8

RE: Vymazavanie poloziek z kosika

Len niekolko poznamok:
Namiesto ICollection ShoppingCart.Items je podla mna vyhodnejsie pouzit typ IEnumerable<ShoppingCartItem>, nemusis to potom pretypovavat.

V metode UpdateItemQuantity overujes ci dany dany produkt existuje v kosiku.
Ak neexsituje, tak by si mohol ason do Traceu vypusat chybu, alebo priamo userovi, lebo taka situacia by nemala nastat a ak nastane, tak treba upozornit, ze nieco je zle.

Aky je rozdiel medzi DeleteItem a DeleteProduct?

Co sa tyka miznutia tych poloziek, musis to nejako oddebugovat. Skus dat breakpoint niekde do pageinitu, skor ako sa cokolvek robi s kosikom v aktualnom requeste a pozri, ci ten item je tam. tak aspon zistis, ci mas chybu v business alebo datovej vrstve.
 

[Reakcia]

photo
newbie
3. 3. 2010 12:36:27
Body: 30
Najaktívnejší č.: 172

RE: Vymazavanie poloziek z kosika

DeleteProduct robi takmer detto co DeleteItem - ibaze po jednom kuse - cize odoberie jeden kus daneho tovaru. Som pre nu zabudol nakopirovat do class-u ShoppingCart zodpovedajucu metodu. Debug je trochu problem - je to v produkcnom prostredi a tam to nefunguje korektne. V testovacom u mna to ide koser...

[Reakcia]

photo
T
3. 3. 2010 12:49:27
Body: 16750
Najaktívnejší č.: 2

RE: Vymazavanie poloziek z kosika

@newbie: nevies poslat nejaky uplne chodivy zjednoduseny priklad? Tu nejaky ocividny problem nevidim, moze to byt sposobene v praci s API z vonka. Ako casto sa Ti to stava? Stava sa Ti to ked to mas vystavene von?

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
newbie
3. 3. 2010 13:27:23
Body: 30
Najaktívnejší č.: 172

RE: Vymazavanie poloziek z kosika

Nuze stava sa to na prvy pohlad uplne nahodne.
Priklad:
Nasekam si do kosika 20 produktov v presne definovanom poradi a vsetko prejde ok.
Skusim tych istych 20 produktov v tom istom poradi a jeden z nich tam po dokonceni pokusu chyba.
Uplne chodive to asi nebude - ale posielam kod pre grid a obsluhu udalosti zo stranky.
<asp:GridView ID="gvwProducts" runat="server" AllowPaging="True" AutoGenerateColumns="False"
   DataKeyNames
="ID" DataSourceID="objProducts" AllowSorting="True" OnRowCommand="gvwProducts_RowCommand"
    OnRowDataBound
="gvwProducts_RowDataBound" EmptyDataText="V zvolenej kategórii sa nenachádzajú žiadne produkty."
    meta:resourcekey
="gvwProductsResource1" EnableViewState="true" >
   
<Columns>
      
<asp:BoundField DataField="ID" Visible="false"
           meta:resourcekey
="BoundFieldResource1" />
      
<asp:ImageField DataImageUrlField="SmallImageURL" ControlStyle-BorderWidth="1px" ItemStyle-Width="100px"
           meta:resourcekey
="ImageFieldResource1" >
<ItemStyle Width="100px"></ItemStyle>
       
</asp:ImageField>
      
<asp:HyperLinkField HeaderText="Produkt" SortExpression="Title" HeaderStyle-HorizontalAlign="Left"
         DataTextField
="Name"
           DataNavigateUrlFormatString
="~/ShowProduct.aspx?ID={0}"
           DataNavigateUrlFields
="ID" meta:resourcekey="HyperLinkFieldResource1" >
<HeaderStyle HorizontalAlign="Left"></HeaderStyle>
       
</asp:HyperLinkField>
      
<asp:TemplateField HeaderText="Jednotková cena s DPH" SortExpression="UnitPriceIncludingVAT"
           HeaderStyle-HorizontalAlign
="Right" meta:resourcekey="TemplateFieldResource2">
         
<ItemTemplate>
            
<div style="text-align: right">
                
<asp:Label runat="server" ID="UnitPriceIncludingVAT"
               Text
='<%# (this.Page as BasePage).FormatPrice(Eval("UnitPriceIncludingVAT"))%>' ></asp:Label>
            
</div>
         
</ItemTemplate>

<HeaderStyle HorizontalAlign="Right"></HeaderStyle>
      
</asp:TemplateField>
      
<asp:ButtonField ButtonType="Image" ImageUrl="~/Images/ShoppingCart.gif"
           CommandName
="Add" Text="Pridať do košíka" ItemStyle-HorizontalAlign="Right"
           meta:resourcekey
="ButtonFieldResource1" >
<ItemStyle HorizontalAlign="Right"></ItemStyle>
       
</asp:ButtonField>
   
</Columns>
   
<EmptyDataTemplate><b>
       
<asp:Localize ID="locNoProducts" runat="server"
           meta:resourcekey
="locNoProductsResource1"
           Text
="Nie sú k dispozícii žiadne produkty."></asp:Localize></b></EmptyDataTemplate>
</asp:GridView>
<asp:ObjectDataSource ID="objProducts" runat="server" SortParameterName="sortExpression"
   SelectMethod
="GetProducts" SelectCountMethod="GetProductCount" EnablePaging="True" TypeName="Product">
   
<SelectParameters>
      
<asp:ControlParameter ControlID="hdnSelectedCategory" Name="categoryID" PropertyName="Value" Type="String" />
   
</SelectParameters>
</asp:ObjectDataSource>
protected void gvwProducts_RowCommand(object sender, GridViewCommandEventArgs e)
        
{
            if (e.CommandName
== "Add")
            
{
                int rowIndex
= Convert.ToInt32(e.CommandArgument);
                GridViewRow row
= gvwProducts.Rows[rowIndex];
                Product prod
= Product.GetProductByID(gvwProducts.DataKeys[rowIndex].Value.ToString());
                this.Profile.ShoppingCart.InsertItem(prod.ID, prod.Name, prod.UnitPriceIncludingVAT);
            }

        }

[Reakcia]

photo
vlko
3. 3. 2010 13:48:15
Body: 35145
Najaktívnejší č.: 1

RE: Vymazavanie poloziek z kosika

Ja vidim skor problem v tom, ze dictionary nie je serializovatelny, takze by som odporucal nahradit ho pomocou ListDictionary a potom sa pozriet na to ako to pobezi.

[Reakcia]

photo
duracellko
3. 3. 2010 15:13:04
Body: 4745
Najaktívnejší č.: 7

RE: Vymazavanie poloziek z kosika

@vlko.. preco by Dictionary nebol serializovatelny.

@newbie.. pokial to robi nahodne, tak prve co ma napadlo: nebezi to na web farme? neviem ci SqlProfileProvider je spraveny tak, aby bezal na web farme.

[Reakcia]

photo
vlko
3. 3. 2010 15:23:34
Body: 35145
Najaktívnejší č.: 1

RE: Vymazavanie poloziek z kosika

to duracellko: dictionary sa nevie serializovat cez XmlSerializer, tak preto ten napad

[Reakcia]

photo
newbie
3. 3. 2010 17:50:26
Body: 30
Najaktívnejší č.: 172

RE: Vymazavanie poloziek z kosika

to duracelko: pokial sa web farmou rozumie aj oddelenie aplikacie od databazy, tak ano - DB je na jednom serveri a aplikacia na druhom

to vlko: serializuje sa to binarne, takze s tym by dictionary nemalo mat problem

[Reakcia]

photo
T
3. 3. 2010 18:32:51
Body: 16750
Najaktívnejší č.: 2

RE: Vymazavanie poloziek z kosika

@newbie:
Hmmm...je to divne, nejake posuvanie indexov(prvy load -> akcia -> exekutnutie akcie) v gride nevyzera byt problem.(tipoval som to tak)
Update panel nepouzivas?
Nemozes dat aj code behind? Nemozes to dat do samostatneho projektu a poslat chodive ... len klucove veci, nech si to mozeme poriadne pozriet?

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
Siro
3. 3. 2010 18:42:58
Body: 5205
Najaktívnejší č.: 6

RE: Vymazavanie poloziek z kosika

To sú tie problémy s MS a inými cudzími komponentami. Čo si človek nenapíše to nemá, a potom bude ladiť, hľadať všetko milión krát a aj tak nič nenájde.

Š#iro

[Reakcia]

photo
newbie
12. 3. 2010 7:13:07
Body: 30
Najaktívnejší č.: 172

RE: Vymazavanie poloziek z kosika

Nuze zda sa ze je to vyriesene.
Sposobovala to zda sa implementacia GridView prvku, kde bolo tlacidlo na pridavanie do kosika urobene ako ButtonField typu Image. BUG v ASP.NET 2.0 sposoboval ze po kliknuti sa dany event spustil 2krat po sebe. Nahradil som toto pomocou TemplateField-u a samotne tlacidlo som v ramci toho urobil ako ImageButton a zda sa ze funguje korektne.

[Reakcia]

photo
T
12. 3. 2010 11:14:28
Body: 16750
Najaktívnejší č.: 2

RE: Vymazavanie poloziek z kosika

@newbie: dokelu, to je znamy bug, mohlo ma to napadnut :-(

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]



Najaktívnejší užívatelia
1. 35145 b. photo vlko
2. 16750 b. photo T
3. 15610 b. photo spigi
4. 6655 b. photo dudok
5. 5705 b. photo slavof
6. 5205 b. photo siro
7. 4745 b. photo duracellko
8. 3800 b. photo Liero
9. 3690 b. photo lubolacko
10. 3625 b. photo jakub