ASP.NET,C#|如何在控制器中使用方法(和返回值)?

时间:2020-10-27 12:36:27

标签: c# html business-logic-layer presentation-layer

我正在做一个学校项目,但被困住了。我正在尝试从用户那里获取一些信息,并使用用户输入的信息来计算一些信息。

我正在运行我的代码,但是我的老师告诉我,我需要将计算替换为逻辑层(它们在我的控制器中)。我正在尝试这样做,但是我被卡住了。

这是我的控制者:

 public class CalculatorController : Controller
    {
        // GET: Calculator
        public ActionResult PackCalculator()
        {
            return View(new CalculatorModel());
        }

        [HttpPost]
        public ActionResult PackCalculator(CalculatorModel calculator)
        {
            CalculatorLogic x = new CalculatorLogic();
            int Y = x.calculator(new CalculatorModel());
            return View(calculator);

        }

这是逻辑层中的类:

namespace ApexLogic
{
   public class CalculatorLogic
    {
        public int calculator(CalculatorModel calculator)
        {
            if (calculator.CurrentLevel < 21)
            {
                calculator.CurrentPack = calculator.CurrentPack + (calculator.CurrentLevel - 1);
                int seizoenPacks = calculator.PlayedSeasons * 5;
                int BattlepassPacks = calculator.Battlepass * 12;
                int CurrentPack = calculator.CurrentPack + seizoenPacks + BattlepassPacks + calculator.BoughtPacks;
                return CurrentPack;
            }

            else if (calculator.CurrentLevel > 21 && calculator.CurrentLevel < 301)
            {
                int CurrentLevelPack = calculator.CurrentLevel - 20;
                int PackCalculator2 = (calculator.CurrentLevel / 2);
                int CurrentLevelPack2 = PackCalculator2 + 19;
                int seizoenPacks = calculator.PlayedSeasons * 5;
                int BattlepassPacks = calculator.Battlepass * 12;
                calculator.CurrentPack = calculator.CurrentPack + seizoenPacks + BattlepassPacks +
                                         calculator.BoughtPacks + CurrentLevelPack2;
                return calculator.CurrentPack;


            }

            else if (calculator.CurrentLevel > 300 && calculator.CurrentLevel <= 500)
            {
                int CurrentLevelPack = calculator.CurrentLevel - 300;
                int PackCalculator2 = (CurrentLevelPack / 5);
                int CurrentLevelPack2 = PackCalculator2 + 159;
                int seizoenPacks = calculator.PlayedSeasons * 5;
                int BattlepassPacks = calculator.Battlepass * 12;
                calculator.CurrentPack = calculator.CurrentPack + seizoenPacks + BattlepassPacks +
                                         calculator.BoughtPacks + CurrentLevelPack2;
                return calculator.CurrentPack;
            }
            else
            {
                return 0;

            }
        }
    }

当我尝试使用断点查看出问题的地方时,我可以看到来自用户的输入已正确定向到该类,但是我的计算没有完成,并且我总是返回0。我不知道现在该怎么办(通常我可以通过断点修复它,但是它们没有帮助我)

The user input

It is handled correctly as you can see

但是我在控制器中的Y始终保持为零。 如果我像在第一个If语句中那样使用返回方式,或者我在第二或第三个if语句中使用返回方式,都没有区别。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

您正在将new CalculatorModel传递到对应用程序逻辑类的调用中:

int Y = x.calculator(new CalculatorModel()); //This is what is messing you up

将其更改为此:

int Y = x.calculator(calculator); //Use the model parameter which is passed into your Post method

答案 1 :(得分:0)

您的模型为null,首先您必须填充模型。像这样更改代码,

db.factory.aggregate([
  {
    "$match": {
      "_id": 1
    }
  },
  {
    $unwind: "$factories"
  },
  {
    "$unwind": "$factories.car"
  },
  {
    "$lookup": {
      "from": "cars",
      "localField": "factories.car",
      "foreignField": "id",
      "as": "factories.car"
    }
  },
  {
    "$unwind": "$factories.car"
  },
  { "$group": {
  "_id": null,
  "data": {
    "$push": {
      "k": "$factories.name",
      "v": "$factories"
    }
  }
}},
{ "$replaceRoot": {
  "newRoot": { "$arrayToObject": "$data" }
}}
])
相关问题