2017-08-22 1 views
0

J'ai une exigence où je dois renvoyer un id de l'appel Ajax à la méthode d'index du `HomeController 'et je peux passer l'id au contrôleur avec Ajax comme suit:Transmettre une valeur de l'appel Ajax à l'index Méthode

Mise à jour 1:

ProductRating classe:

public class ProductRating 
{ 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public double UserRating { get; set; } 
    public double? RatingCount { get; set; } //Messed up with this earlier and when Luqman told me about the model, it reminded to add this property and the rest is done 
    public double? Total { get; set; } 
} 

Ajax Appel:

<script> 
$(document).ready(function (response) { 
    if (response) { 
     $.ajax({ 
      url: '@Url.Action("AddRating")', 
      data: { id: '@item.ProductId', rating: rate }, 
      type: 'POST', 
      success: function (data) { 
       $('[email protected]').html(data); 
        } 
       }); 
       } 
      }).fail(function() { 
     alert("Failed to get total ratings!"); 
    }); 
</script> 

Controller:

[HttpPost] 
public JsonResult AddRating(int id, double rating) 
{ 
    var con = new ProductRating 
    { 
     RatingCount = db.Ratings.Where(c => c.ProductId == id).Count() 
    }; 

    if (con.RatingCount >= 300) 
    { 
     return Json("Rating limit already exits", JsonRequestBehavior.AllowGet); 
    } 
    else 
    { 
     Ratings aRatings = new Ratings(); 
     aRatings.ProductId = id; 
     aRatings.UserRating = rating; 

     db.Ratings.Add(aRatings); 
     db.SaveChanges(); 

     return Json(con.RatingCount, JsonRequestBehavior.AllowGet); 
    } 
} 

Voir dans la méthode ci-dessus, je l'ai fixé l'id dans une variable de session et passerait cette valeur variable dans la méthode index en tant que paramètre. Le problème est que la variable de session ne fonctionne pas dans la première tentative jusqu'à ce que je rafraichisse la page. Mais pendant le débogage, je peux voir les valeurs et à chaque fois, ça s'efface. Je suppose que ce n'est pas la bonne façon de le faire. ViewBag et Session ne semblent pas utiles. Mon exigence est de compter les notes des produits individuels par rapport à leur identifiant de produit et cela devrait être retourné avec le même appel Ajax. Dans la méthode Index, je fais ce qui suit:

CountAll = db.Ratings.Where(c => c.ProductId == id).Count() //id - I am trying to pass from Ajax call 

je l'espère, il y aurait une meilleure façon de le faire et actuellement aux prises avec elle.

Remarque: Merci @Luqman et @Stephen Muecke. @Stephen Muecke Merci pour l'appel. Je faisais deux appels Ajax à des fins de démonstration et des excuses pour le retard pour mettre à jour le poste.

Voici l'exemple de travail en ce moment:

Star Rating

+0

Pourquoi diable faites-vous 2 appels ajax séparés? –

+0

S'il vous plaît voir mon post mis à jour @Stephen Muecke. Merci, –

Répondre

1

Pourquoi vous utilisez la session pour obtenir l'ID stocker. Veuillez utiliser un modèle ou une tempdata pour stocker cet identifiant.

+0

Fait le travail @Luqman. Merci. –

+0

'TempData' ** EST **' Session'! C'est un non-sens –

+0

Et comment cela aiderait-il? Le modèle n'existera pas dans le 2ème appel - il devrait être stocké dans 'Session'! Mais la question de l'OP n'a aucun sens de toute façon (faire 2 appels séparés quand un seul est nécessaire) –