Прежде всего, я новичок в ASP.NET. Я пытаюсь создать судоку на веб-сайте, но у меня есть одна проблема.ASP.NET HomeController
Показывать поле sudoku с помощью метода HomeController -> ActionResult index();
В этом ActionResult я создаю новый SudokuField и покажу его на веб-сайте. Это работает.
Я также добавил @ Html.ActionLink в моем Index.cshtml так:
@Html.ActionLink("Cheat", "Index", new { @no = 2 })
Когда я нажимаю на «обмануть», он снова вызывает метод Index() из HomeController и дает номер 2 как параметр, отлично работает. Но поскольку метод Index() снова вызван, HomeController создает новый объект Sudoku. Поэтому я теряю текущее состояние GameField.
Мой вопрос: Есть ли решение, которое HomeController не будет создавать новый объект судоку.
Мой 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', тогда, когда вы обманываете, вы можете проверить, существует ли экземпляр, а не создавать новый. – Jasen
Согласен с Джейсоном. Каждый запрос может обрабатываться разными потоками. Помещение экземпляра в ваш класс контроллера не гарантирует, что вы получите доступ к одному экземпляру (т. Е. Не потоковому безопасному). –