ASP.NET HomeController

时间:2016-01-04 23:33:25

标签: c# asp.net asp.net-mvc

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

1 个答案:

答案 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);
}