Je travaille avec un petit projet ASP.NET MVC - boutique en ligne.Problème avec View - il ne rafraîchit pas après la mise à jour db
J'ai la méthode addToCart qui ajoute le produit sélectionné au panier - il met à jour la table du chariot dans mon db et affiche la vue du panier avec son contenu. Mais j'ai des problèmes. Alors que db met à jour correctement, la vue ne le fait pas. Je vois que la quantité de produit dans ma base de données est incrémentée correctement mais la quantité affichée n'est pas modifiée. Je dois arrêter de déboguer mon application dans Visual Studia et la redémarrer - alors ma vue affiche des données correctes. Qu'est-ce qui peut être mauvais?
En utilisant LINQ to Entity. Metod Ajouter du référentiel panier:
public void Add(int product, int quantity, string user)
{
Cart cart = null;
cart = (from c in de.Cart
where (c.userName == "testUser" && c.productId == product)
select c).First();
// query is searching for existing product of testUser and id specified in parameter in cart and get it
cart.quantity += 1; //increment quantity
de.SaveChanges(); // save entity
}
méthode AddToCart de commande:
public void AddToCart(int pid, int quant, string usr)
{
_cartRep.Add(pid,quant,usr);
}
et la méthode qui retourne panier Voir:
public ActionResult Cart()
{
IEnumerable<CartInfo> model = _cartRep.GetTrans();
return View(model);
}
Voici getTrans() mise en œuvre:
public IEnumerable<CartInfo> GetTrans()
{
using (DBEntities de = new DBEntities())
{
return (from c in de.Cart
where (c.userName == "testUser")
select new CartInfo
{
Id = c.id,
ProductId = c.productId,
Quntity = c.quantity,
Realized = c.realized,
UserName = c.userName,
Value = c.value,
Products = (from p in de.Product
where (p.id == c.productId)
select new ProductInfo
{
Category = p.Category,
Desc = p.Description,
Id = p.id,
Image = p.Image,
Name = p.Name,
Quntity = p.Quantity,
Price = p.Price
})
}).ToList();
}
}
Comme vous l'avez vu, j'ai un nom d'utilisateur codé en dur. Je l'ai fait seulement pour les tests. Si je savais que cela fonctionne, je vais améliorer le code. Merci pour un bon conseil avec .FristOrDefault()
Est-il possible, nous pouvons aussi voir le code pour GetTrans() du référentiel du panier? Il y a tellement de problèmes potentiels dans votre code que je peux voir en ce moment, par exemple: vous passez une quantité de produits à Add (pid, quant, usr) et ensuite vous avez codé en dur le nom et la quantité d'utilisateur dans la recherche et l'addition; Que se passe-t-il si l'utilisateur n'a pas ce produit dans son panier pour commencer, ".First()" lèvera une exception (.FirstOrDefault() vous donnera une valeur null si elle ne peut pas en trouver un), etc - Je wouldn ne soyez pas surpris si vous retourniez le mauvais panier d'utilisateurs à ce stade. –