【发布时间】:2017-06-08 20:18:49
【问题描述】:
我正在尝试使用按钮的 onClick 事件使视图中的按钮调用模型中的方法,但我不确定如何使其工作。按钮什么都不做。
这是我的观点:
<html>
<body>
<div>
<p>Coins: @Model.Coins</p>
<button type="button" id="btnScore"
onclick="Btn_Click">Click me!</button>
</div>
</body>
</html>
这是我尝试调用该方法的模型:
public class ClickerGame
{
public int Coins { get; set; }
public ClickerGame()
{
Coins = 0;
}
public void Btn_Click()
{
Coins++;
}
}
这是控制器:
public class ClickerController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
ClickerGame model = new ClickerGame();
return View(model);
}
}
这是我的 Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Clicker}/{action=Index}/{id?}");
});
}
}
我能够在视图中调用@Model.Coins 获得硬币数量,但是当我尝试使用@Model.Btn_Click 时,它给了我一个错误,提示该方法无法转换为委托对象。 我在 Visual Studio 中使用 Asp.Net Core 1.0.1。
编辑: 我更改了控制器和视图,它现在可以调用该方法,但是当它尝试增加 coin 变量时,我得到一个 NullReference 异常......
观点:
@model AspNetClicker.Models.ClickerGame
<script>
function IncrementCount()
{
location.href = "@Url.Action("IncrementCount")";
}
</script>
<html>
<body>
<div>
<p>Coins: @Model.Coins</p>
<button type="button" id="btnScore"
onclick="IncrementCount()">
Click me!
</button>
</div>
</body>
</html>
点击游戏:
public class ClickerGame
{
public int Coins { get; set; }
public ClickerGame()
{
Coins = 0;
}
}
点击控制器:
public class ClickerController : Controller
{
ClickerGame model;
public IActionResult Index()
{
model = new ClickerGame();
return View(model);
}
public void IncrementCount()
{
model.Coins++;
}
}
【问题讨论】:
-
据我所知 onclick 应该有一个 javascript 调用。还有其他调用 .NET 方法的方法(如回调等),但它不能是您编写的方式。您可能需要编写一个 javascript 方法“Btn_Click”。关于错误消息,您需要在按钮 HTML 标记的 onclick 中的 Btn_Click 旁边放置空括号
-
你没有使用任何内置模板或ajax调用,他们怎么能调用点击事件......它不是.aspx,它是mvc。
-
可能你混合了 aspnet webforms 和 mvc 方法。您可以开始阅读官方的 aspnet 核心文档。 docs.microsoft.com/en-us/aspnet/core/mvc/overview
-
您不能从 Javascript 调用任何旧 .NET 类的特定方法。在 ASP.NET 的 MVC 风格中,您必须在 Controller 中创建一个 Action 方法。让您的 javascript 向操作发出请求(通过回发、ajax 或只是重定向,具体取决于用例),然后在操作方法中,您可以调用任何其他必要的 .NET 方法以正确处理请求。
标签: c# asp.net-core asp.net-core-mvc