【问题标题】:MVC ASP.NET Writing to database is looping unintentionallyMVC ASP.NET 写入数据库无意循环
【发布时间】:2017-05-27 12:56:54
【问题描述】:

我对 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 多行新数据。

我不确定发生了什么,但它似乎在不断调用此方法并写入数据库。

有谁知道为什么,我该如何解决?

【问题讨论】:

    标签: c# asp.net asp.net-mvc database visual-studio


    【解决方案1】:

    你最后递归调用了方法,用

    return EggRecieved();
    

    你应该在那里返回一个ActionResult,比如

    return View("MyView");
    

    【讨论】:

    • 我觉得自己很蠢。深夜编码并不是最有效的
    【解决方案2】:

    发生这种情况是因为在返回语句中,您写道:

    return EggRecieved();
    

    这意味着您再次调用相同的方法并且它陷入了无限循环抛出错误。使用您的 View 或 Json 等删除它。

    【讨论】:

      【解决方案3】:

      你在代码的最后写的是返回 EggRecieved() 是磨损的, 你需要返回 view() 你想要的。 所以将 EggRecieved 替换为 view();因为当您返回 EggRecieved() 时,它会进行递归循环并每次调用 谢谢你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 2015-08-22
        • 2014-06-03
        相关资源
        最近更新 更多