首先,我是ASP.NET的新手。
我正在尝试在网站上创建数独,但是有一个问题。
我用HomeController方法-> ActionResult index();显示了数独字段。
在此ActionResult中,我创建一个新的SudokuField并将其显示在网站上。这可行。
我还在我的Index.cshtml中添加了@ html.ActionLink,如下所示:@Html.ActionLink("Cheat", "Index", new { @no = 2 })
当我单击“作弊”时,它再次从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);
}
最佳答案
每个请求都会创建一个新的控制器实例,因此您需要将游戏创建移到一个动作中。
您可以将sudoku实例存储在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);
}