如何使用Asp.Net中的按钮来调用方法
我想在我的视图中调用一个按钮的onClick事件模型中的方法,但我不知道如何使这项工作。按钮只是没有做任何事情。如何使用Asp.Net中的按钮来调用方法
这是我的看法:
<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。
编辑: 我改变了控制器和视图,它现在能够调用的方法,但是,当它试图增加硬币可变我得到一个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>
ClickerGame:
public class ClickerGame
{
public int Coins { get; set; }
public ClickerGame()
{
Coins = 0;
}
}
ClickerController:
public class ClickerController : Controller
{
ClickerGame model;
public IActionResult Index()
{
model = new ClickerGame();
return View(model);
}
public void IncrementCount()
{
model.Coins++;
}
}
在webforms中不可能这样做。 我会简单解释一下。请执行它。 按照以下步骤使其在MVC工作:
1.更改您的视图代码下面的代码:
<html>
<body>
<div>
<p>Coins: @Model.Coins</p>
<button type="button" id="btnScore"
onclick="IncrementCount()">Click me!</button>
</div>
</body>
<script>
function IncrementCount() {
$.ajax({
type: "POST",
url: "/Clicker/IncrementCount",
async: true,
success: function (msg) {
ServiceSucceeded(msg);
},
error: function() {
return "error";
}
});
}
</script>
</html>
2.在您的控制器添加一个操作方法IncrementCount
和增加计数这里。
public class ClickerController : Controller
{
[HttpPost]
public void IncrementCount()
{
//
}
}
我已经实现了你给我的代码,它对我来说可能有用,但调试器不会停留在我添加到ClickerController.IncrementCount()的断点处。我是否也需要编辑我的Mvc路线? – Dracedragon
无需编辑路线。它应该可以正常工作 – ViVi
尽管我完全按照您的答案进行操作,但它对我无效。当我在Ajax代码上设置一个断点时,我得到了警告,断点也不会被触发。 – Dracedragon
试试这个
<input type="button" value="Click me!" onclick="nextUrl()"/>
function nextUrl() {
location.href = "/Home/Contact";
}
我尝试了类似的东西,并编辑我的问题以显示我的最新代码。这令人伤心地给了我一个不同的问题。 :/ – Dracedragon
请分享错误截图 – codelover
https://www.dropbox.com/s/j9ywteotbrwtfwtt/Screenshot_1.png?dl=0 – Dracedragon
据我的onclick知道应该有一个javascript调用。还有其他方法可以调用.NET方法(如回调等),但它不能像你写的那样。您可能需要编写一个JavaScript方法“Btn_Click”。关于错误消息,您需要在Btn_Click旁边的空括号内点击按钮的HTML标记 – Nirman
您没有使用任何内置模板或ajax调用,他们如何调用click事件....它不是.aspx,它是mvc。 –
可能你混合了aspnet webforms和mvc方法。您可以开始阅读官方的aspnet核心文档。 https://docs.microsoft.com/en-us/aspnet/core/mvc/overview –