2016-12-02 93 views
0

我想在我的視圖中調用一個按鈕的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 –

回答

1

在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

0

試試這個

<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

相關問題