asp.net-mvc - 将 Blazor 中的井字游戏转换为 .Net Core MVC
问题描述
我已通过 GitHub 链接https://github.com/exceptionnotfound/BlazorWasmTicTacToe从您那里检索到代码
其背后的代码是使用Blazor WASM开发的井字游戏。我想尝试使用他的代码使用.Net Core MVC(3.1)开发类似的代码。所以基本上我已经根据主要的 Blazor 源代码创建了模型,但是在运行时,Index.cshtml 没有响应。
下面是我的视图(Index.cshtml)
@using TicTacGame.Models;
@{
ViewData["Title"] = "Tic Tac Toe";
GameBoard board = new GameBoard();
}
@if (!board.GameComplete)
{
<h2>@board.CurrentTurn's turn</h2>
}
else
{
<h2>
@board.GetMessage()
<button class="btn btn-success" onclick="@{board.Reset();} ">New Game</button>
</h2>
}
<div class="board">
@for (int i = 0; i < 3; i++)
{
<div class="column">
@for (int j = 0; j < 3; j++)
{
int x = i;
int y = j;
<div class="gamepiece
@board.Board[i, j].Style.ToString().ToLower()" onclick=@{ board.PieceClicked(x, y);}
style="@(board.IsGamePieceAWinningPiece(i,j)?"opacity:0.1": "")"></div>
}
</div>
}
我的控制器是基本的:
return View();
与 Blazor 工作中几乎相同的代码相比,我哪里出错了。
解决方案
问题在于onclick=@{ board.PieceClicked(x, y);}
Blazor,它将在客户端的页面中运行。
但是,在 ASP.Net MVC 中,此视图将在服务器上呈现,并且board
不可用,因此无法在客户端上运行。您必须将PieceClicked
代码迁移到 TypeScript/JavaScript,以便在单击时它可以在客户端运行。
当然,这也意味着您也必须迁移board.Reset()
。
推荐阅读
- spring - 如何在 Spring Boot 中为 MongoDB 4.2 Transaction 添加配置?
- javascript - 读取具有 settimeout 最大值的流已达到错误
- javascript - React JS:onClick 不起作用;无法使用 onClick 放置“直通”显示属性
- javascript - NestJs如何在特定时间每天运行3次cron作业
- python - 如何使用 click 解析参数的字符串?
- nginx - URL重写上的nginx正则表达式引擎不支持波浪括号?
- ios - 在 Swift 中将多个地址转换为坐标 - IOS
- python - 我将电子邮件要求设置为 true 并且唯一设置为 true 但仍然可以在我的 django 网站中使用重复的电子邮件创建帐户
- javascript - save() 不使用猫鼬改变
- amazon-web-services - 当我通过 Terraform 设置 VPC 和 EC2 时,为什么我无法 ping 我的 EC2 实例?