Chastia® | Portals - chastia.eu - prevody.sk - aspnet.sk - termoklima.sk - Partners - Quantasoft - QSH.sk - Free Web Hosting
 
WUG.sk udalosti
WebSlice - FórumDiskusné fórum
Vyhľadávanie
Skip Navigation LinksAspNet.sk > F�rum > .NET > Web Forms (ASP.NET)

Diskusné fórum

Autor Téma
newbie
3. 3. 2010 8:48:38
Príspevkov: 6
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 30

Najaktívnejší č.: 135
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?

Bookmark and Share [Reakcia]
T
3. 3. 2010 10:55:54
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
RE: Vymazavanie poloziek z kosika
Ahoj. Skus urobit zjednoduseny priklad a posli. Co je klucom v tom disctionary?

Tomáš Zeman, MCSD.NET

Bookmark and Share [Reakcia]
newbie
3. 3. 2010 11:15:06
Príspevkov: 6
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 30

Najaktívnejší č.: 135
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.

Bookmark and Share [Reakcia]
Liero
3. 3. 2010 12:28:30
Príspevkov: 138
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 690

Najaktívnejší č.: 22
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.
 

Bookmark and Share [Reakcia]
newbie
3. 3. 2010 12:36:27
Príspevkov: 6
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 30

Najaktívnejší č.: 135
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...

Bookmark and Share [Reakcia]
T
3. 3. 2010 12:49:27
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
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

Bookmark and Share [Reakcia]
newbie
3. 3. 2010 13:27:23
Príspevkov: 6
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 30

Najaktívnejší č.: 135
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);
            }

        }

Bookmark and Share [Reakcia]
vlko
3. 3. 2010 13:48:15
Príspevkov: 1373
Článkov: 0
Blogy: 0
Správičiek: 1087
Body: 28605

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.

Bookmark and Share [Reakcia]
duracellko
3. 3. 2010 15:13:04
Príspevkov: 429
Článkov: 5
Blogy: 26
Správičiek: 15
Body: 4045

Najaktívnejší č.: 4
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.

Bookmark and Share [Reakcia]
vlko
3. 3. 2010 15:23:34
Príspevkov: 1373
Článkov: 0
Blogy: 0
Správičiek: 1087
Body: 28605

Najaktívnejší č.: 1
RE: Vymazavanie poloziek z kosika
to duracellko: dictionary sa nevie serializovat cez XmlSerializer, tak preto ten napad

Bookmark and Share [Reakcia]
newbie
3. 3. 2010 17:50:26
Príspevkov: 6
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 30

Najaktívnejší č.: 135
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

Bookmark and Share [Reakcia]
T
3. 3. 2010 18:32:51
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
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

Bookmark and Share [Reakcia]
Siro
3. 3. 2010 18:42:58
Príspevkov: 416
Článkov: 0
Blogy: 18
Správičiek: 24
Body: 3460

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

Bookmark and Share [Reakcia]
newbie
12. 3. 2010 7:13:07
Príspevkov: 6
Článkov: 0
Blogy: 0
Správičiek: 0
Body: 30

Najaktívnejší č.: 135
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.

Bookmark and Share [Reakcia]
T
12. 3. 2010 11:14:28
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
RE: Vymazavanie poloziek z kosika
@newbie: dokelu, to je znamy bug, mohlo ma to napadnut :-(

Tomáš Zeman, MCSD.NET

Bookmark and Share [Reakcia]


Zdroje
Bloggeri OPML Bloggeri
RSS 100 SpigiBlog
RSS 3 EX©M
RSS 1 singh
WUG.sk články
WUG.sk
Najaktívnejší...
28605 b. 1. vlko
14160 b. 2. spigi
13610 b. 3. T
4045 b. 4. duracellko
3845 b. 5. slavof
3460 b. 6. siro
3295 b. 7. skippo
3275 b. 8. jakub
2595 b. 9. dudok
2145 b. 10. ex
Ocenenie

MVP Profil - Igor Stanek
Čo je to MVP?
Partneri portálu
Reklama
Spriatelené weby
Copyright © 2002 - 2009 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.
RSS - anotácia, RSS - Blogy