首先,我是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);
}

10-04 12:18