首先,我是ASP.NET的新手。 我正在尝试在网站上创建数独游戏,但我有一个问题。
我使用HomeController方法显示数独字段 - > ActionResult index();
在这个ActionResult中,我创建了一个新的SudokuField并在网站上显示它。这很有效。
我还在我的Index.cshtml中添加了一个@ html.ActionLink,如下所示:
@Html.ActionLink("Cheat", "Index", new { @no = 2 })
当我点击“Cheat”时,它再次从HomeController调用Index()方法并将数字2作为参数,工作正常。但是因为再次调用了Index()方法,HomeController会创建一个新的Sudoku对象。所以我失去了GameField的当前状态。
我的问题:HomeController是否有解决方案不会成为Sudoku的新对象。
我的HomeController - >
SudokuBasis.Game myGame = new SudokuBasis.Game();
Models.Sudoku s = new Models.Sudoku(); // Sudoku Object
public ActionResult Index(int? no) {
if (no == null) {
myGame.Create(); // creates all fields and add some value
} else if (no == 2) {
myGame.Cheat(); // fills all fields
}
s.MyFields = myGame.GameField();
return View(s);
}
答案 0 :(得分:3)
每个请求都会创建一个新的控制器实例,因此您需要将游戏创建移动到一个动作中。
您可以将数独实例存储在Session
中,然后当您作弊时,您可以检查实例是否存在而不是创建新实例。
public ActionResult NewGame()
{
var game = new Game();
Session["game"] = game;
return View(game);
}
public ActionResult Cheat()
{
if (Session["game"] == null)
{
return RedirectToAction("NewGame");
}
var game = Session["game"] as Game;
return View(game);
}