2017-05-27 58 views
-3

我對MVC和ASP.NET很陌生,但遇到了一個奇怪的問題。MVC ASP.NET寫入數據庫正在無意中循環

我將一個條目添加到我的數據庫,然後保存更改,但這不會發生。

[Authorize] 
    public ActionResult EggRecieved() 
    { 
     //CHECK IF THEY HAVE RECIEVED EGG IN LAST DAY 

     var user = db.PDCUsers.SingleOrDefault(x => x.Username == User.Identity.Name); 
     var userId = user.Id; 

     var possibleEggs = db.PkmnDatas.Where(x => x.CanBeEgg == true); 
     var rand = new Random(); 
     var no = rand.Next(0, possibleEggs.Count()); 
     var pokemonArray = possibleEggs.ToArray(); 
     var pokemon = pokemonArray[rand.Next(0, pokemonArray.Count())]; 
     Boolean? isMale = null; 
     if (pokemon.GenderRatio != null) 
     { 
      isMale = rand.Next(0, 1000) < pokemon.GenderRatio1.ChanceMale * 1000; 
     } 
     var isShiny = 1 == rand.Next(1,Constants.SHINYCHANCE); 
     //GET THE ABILITIES 

     db.PlayerPkmns.Add(new PlayerPkmn 
     { 
      PkmnDataId = pokemon.Id, 
      Nickname = pokemon.Name, 
      IsMale = (bool)isMale, 
      Nature = rand.Next(1, 25), 
      Ability = 1, 
      EggObtained = DateTime.Now, 
      Shiny = isShiny, 
      CurrentTrainerId = userId, 
      OriginalTrainerId = userId, 
      StepsToHatch = Constants.TOTALSTEPSFOREGGHATCH 
     }); 

     db.SaveChanges(); 

     return EggRecieved(); 
    } 

當我點擊一個按鈕時,我調用這個方法,然後服務器花了半分鐘,說它不能訪問視圖。

然後我檢查我的數據庫,並有500多條新的數據行。

我不確定發生了什麼,但它看起來像不斷調用此方法並寫入數據庫。

任何人都知道爲什麼,我該如何修復它?

回答

5

您遞歸調用到底方法,用

return EggRecieved(); 

您應該返回一個ActionResult那裏,就像

return View("MyView"); 
+0

我覺得很愚蠢。 深夜編碼不是最有效的 – mint

2

發生這種情況,因爲INT return語句,你寫道:

return EggRecieved(); 

這意味着你再次調用相同的方法,它卡在en dless循環投擲錯誤。用你的View或Json等刪除。

1

你在代碼的末尾寫了return EggRecieved()這是worng, 你需要返回view()。 所以將EggRecieved替換爲view();因爲當你返回EggRecieved()時,它會使遞歸循環和每次調用 謝謝