如何使用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++; 
    } 
} 
+0

据我的onclick知道应该有一个javascript调用。还有其他方法可以调用.NET方法(如回调等),但它不能像你写的那样。您可能需要编写一个JavaScript方法“Btn_Click”。关于错误消息,您需要在Btn_Click旁边的空括号内点击按钮的HTML标记 – Nirman

+0

您没有使用任何内置模板或ajax调用,他们如何调用click事件....它不是.aspx,它是mvc。 –

+1

可能你混合了aspnet webforms和mvc方法。您可以开始阅读官方的aspnet核心文档。 https://docs.microsoft.com/en-us/aspnet/core/mvc/overview –

在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() 
    { 
     // 
    } 
} 
+0

我已经实现了你给我的代码,它对我来说可能有用,但调试器不会停留在我添加到ClickerController.IncrementCount()的断点处。我是否也需要编辑我的Mvc路线? – Dracedragon

+0

无需编辑路线。它应该可以正常工作 – ViVi

+0

尽管我完全按照您的答案进行操作,但它对我无效。当我在Ajax代码上设置一个断点时,我得到了警告,断点也不会被触发。 – Dracedragon

试试这个

<input type="button" value="Click me!" onclick="nextUrl()"/> 

function nextUrl() { 
    location.href = "/Home/Contact"; 
} 
+0

我尝试了类似的东西,并编辑我的问题以显示我的最新代码。这令人伤心地给了我一个不同的问题。 :/ – Dracedragon

+0

请分享错误截图 – codelover

+0

https://www.dropbox.com/s/j9ywteotbrwtfwtt/Screenshot_1.png?dl=0 – Dracedragon