将Ajax调用中的值传递给Index方法

将Ajax调用中的值传递给Index方法,ajax,entity-framework,asp.net-mvc-5,controller,Ajax,Entity Framework,Asp.net Mvc 5,Controller,我有一个要求,我必须从“HomeController”的Index方法的Ajax调用返回一个id,我可以通过Ajax将id传递给控制器,如下所示: 更新1: 产品等级: Ajax调用: 在上面的方法中,我将id设置为会话变量,并将此变量值作为参数传递给Index方法。问题是会话变量在第一次尝试时不起作用,直到我刷新页面。但在调试时,我可以看到值,每次都会被删除。我想,这样做是不对的。查看包和会话似乎没有帮助。我的要求是根据单个产品的产品id计算它们的评级,并且应该使用相同的Ajax调用返回。在索

我有一个要求,我必须从“HomeController”的Index方法的Ajax调用返回一个id,我可以通过Ajax将id传递给控制器,如下所示:

更新1:

产品等级:

Ajax调用:

在上面的方法中,我将id设置为会话变量,并将此变量值作为参数传递给Index方法。问题是会话变量在第一次尝试时不起作用,直到我刷新页面。但在调试时,我可以看到值,每次都会被删除。我想,这样做是不对的。查看包和会话似乎没有帮助。我的要求是根据单个产品的产品id计算它们的评级,并且应该使用相同的Ajax调用返回。在索引方法中,我执行以下操作:

CountAll = db.Ratings.Where(c => c.ProductId == id).Count() //id - I am trying to pass from Ajax call
我希望,有更好的方法来做到这一点,目前正在努力解决这一问题

注:谢谢@Luqman和@Stephen Muecke@Stephen Muecke谢谢你的电话。为了演示,我打了两个Ajax电话,并为延迟更新帖子表示歉意

以下是当前的工作示例:


为什么使用会话获取存储id。请使用模型或Tempdata存储该id。

Tempdata是会话!这是毫无意义的,那会有什么帮助?第二次呼叫中不存在该模型-它必须存储在会话中!但是OP的问题没有任何意义,不管怎样,当只有一个电话是空的时候,打两个单独的电话needed@AT-2017年:请编辑这个答案,你是通过什么方式得到解决方案的。你到底为什么要打两个单独的ajax电话?请参阅我的最新帖子@Stephen Muecke。谢谢
<script>
$(document).ready(function (response) {
     if (response) {
       $.ajax({
          url: '@Url.Action("AddRating")',
          data: { id: '@item.ProductId', rating: rate },
          type: 'POST',
          success: function (data) {
                 $('.@item.ProductId').html(data);
                   }
                });
              }
          }).fail(function () {
        alert("Failed to get total ratings!");
     });
</script>
[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);
   }
}
CountAll = db.Ratings.Where(c => c.ProductId == id).Count() //id - I am trying to pass from Ajax call