ASP.NET, C# |如何在控制器中使用方法(和返回值)?
Posted
技术标签:
【中文标题】ASP.NET, C# |如何在控制器中使用方法(和返回值)?【英文标题】:ASP.NET, C# | How to use a method (and the returned value) with a controller? 【发布时间】:2021-02-09 17:45:56 【问题描述】:我正在做一个学校项目,但我被困住了。我正在尝试从用户那里获取一些信息,并根据用户输入的信息计算一些事情。
我的代码正在运行,但我的老师告诉我需要将计算替换到我的逻辑层(它们在我的控制器中)。我正在尝试这样做,但我被卡住了。
这是我的控制器:
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 语句中的 return 方式,或者我在第二个或第三个 if 语句中使用 return 方式,这没有区别。 有人可以帮我吗?
【问题讨论】:
【参考方案1】:你的模型是 null ,首先你必须填写你的模型。像这样更改您的代码,
[HttpPost]
public ActionResult PackCalculator(CalculatorModel calculator)
CalculatorLogic x = new CalculatorLogic();
int Y = x.calculator(new CalculatorModel());
return View(calculator);
[HttpPost]
public ActionResult PackCalculator(CalculatorModel calculator)
CalculatorLogic x = new CalculatorLogic();
var model = new CalculatorModel()
CurrentLevel = 12,
CurrentLevelPack = 10 .....
;
int Y = x.calculator(model);
return View(calculator);
【讨论】:
CurrentLevel 等不是静态的,我不能给它一个数字,因为用户必须这样做。【参考方案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
【讨论】:
以上是关于ASP.NET, C# |如何在控制器中使用方法(和返回值)?的主要内容,如果未能解决你的问题,请参考以下文章
C# Asp net core 如何在控制器之外调用数据库上下文
如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?
ASP.NET C# 如何在程序中控制IIS服务或应用程序池重启?