ASP.NET/C#中按钮无法触发后台代码问题求助
解决ASP.NET按钮无法触发后台代码的问题
错误原因
你遇到的Uncaught ReferenceError: PlayerHit is not defined报错,核心问题是混淆了前端事件和服务器端事件的绑定逻辑:
- 普通HTML
<button>的onclick属性是用来绑定前端JavaScript函数的,浏览器会在前端代码里查找PlayerHit,但你的PlayerHit是后台C#方法,自然找不到。 - 就算给普通按钮加了
runat="server",直接写onclick="PlayerHit"也不对,因为服务器端按钮的事件绑定属性不是这个。
正确实现方式
方式1:使用ASP.NET服务器控件按钮
直接用<asp:Button>控件,注意事件属性是**OnClick(首字母大写)**,对应后台的C#方法:
<asp:Button runat="server" ID="butAddPlayerCard" OnClick="PlayerHit" Text="Hit2" />
后台方法保持现有签名即可(public或protected都可以,推荐用protected):
protected void PlayerHit(object sender, EventArgs e) { DeckAction deckAction = new DeckAction(); deckAction.AddCard(deck, PlayersHand); foreach (var item in PlayersHand) { if (item.Values == 0) { var cardValue = item.Values; } } }
方式2:使用HTML按钮绑定服务器事件
如果想用普通<button>标签,要改用**OnServerClick**属性绑定后台方法,而不是onclick:
<button ID="Button2" OnServerClick="PlayerHit" runat="server" class="btn btn-primary btn-light">Hit</button>
这个写法同样会触发后台的PlayerHit方法。
额外注意点
- 确保ASPX页面顶部
@Page指令的CodeBehind或CodeFile属性,正确指向后台代码文件 - 后台方法的访问修饰符不能是
private,否则页面无法调用该方法
内容的提问来源于stack exchange,提问作者F. Price
相关产品推荐
相关产品推荐

