You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Web Forms Button后台btnSendMail_Click无引用导致点击失效

问题描述

ASP.NET Button的onclick点击行为无法生效,后台代码中btnSendMail_Click显示0引用,此前多次使用该方法都能正常运行,本次无法实现预期效果。

前端代码

<div class="col-lg-8" runat="server">
    <div class="contact-form section-top-gap-100" data-aos="fade-up"  data-aos-delay="200">
        <asp:Label Text="<%$Resources:Lang, ContactUs %>" runat="server" Font-Size="Large" Font-Bold="true"></asp:Label>
        <div id="contact-form">
            <div class="row">
                <div class="col-lg-6">
                    <div class="default-form-box mb-20">
                       <asp:Label Text="<%$Resources:Lang, Name %>" runat="server" Font-Bold="true"></asp:Label>
                        <input name="name" type="text" id="contactName" runat="server" placeholder="<%$Resources:Lang, NamePlaceHolder %>" >
                        
                    </div>
                </div>
                <div class="col-lg-6">
                    <div class="default-form-box mb-20">
                       <asp:Label Text="<%$Resources:Lang, mail %>" runat="server" Font-Bold="true"></asp:Label>
                        <input name="email" type="email" id="contactEmail" runat="server" placeholder="<%$Resources:Lang, mailPlaceHolder %>" >
                    </div>
                </div>
                <div class="col-lg-12">
                    <div class="default-form-box mb-20">
                       <asp:Label Text="<%$Resources:Lang, subject %>" runat="server" Font-Bold="true"></asp:Label>
                        <input name="subject" type="text" id="contactSubject" runat="server" placeholder="<%$Resources:Lang, SubjectPlaceHolder %>">
                    </div>
                </div>
                <div class="col-lg-12">
                    <div class="default-form-box mb-20">
                       <asp:Label Text="<%$Resources:Lang, message %>" runat="server" Font-Bold="true"></asp:Label>
                        <textarea name="message" id="contactMessage" cols="30" rows="10" runat="server" placeholder="<%$Resources:Lang, MessagePlaceHolder %>" ></textarea>
                    </div>
                </div>
                <div class="col-lg-12">
                    <asp:Button runat="server" CssClass="contact-submit-btn" Text="<%$Resources:Lang, sendMessage %>" ID="btnSendMail" OnClick="btnSendMail_Click" UseSubmitBehavior="true"/>
                </div>
                <p class="form-messege"></p>
                
            </div>
        </div>
    </div>
</div>

后台代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AsjSpray.Web.Pages
{
    public partial class Iletisim : BasePage
    {
        #region Properties
        public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            Page.Title = "AsjSpray " + Resources.Lang.ContactUs;
            log.Info("İletişim Sayfasına girildi");
        }

        private static string GetIp()
        {
            string VisitorsIPAddress = string.Empty;
            try
            {
                if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
                {
                    VisitorsIPAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
                }
                else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
                {
                    VisitorsIPAddress = HttpContext.Current.Request.UserHostAddress;
                }
            }
            catch (Exception ex)
            {
                log.Error("Hata [Iletisim.GetIp()]" + ex.Message);
            }
            return VisitorsIPAddress;
        }

        bool IsValidEmail(string email)
        {
            try
            {
                var addr = new System.Net.Mail.MailAddress(email);
                return addr.Address == email;
            }
            catch
            {
                return false;
            }
        }

        protected void btnSendMail_Click(object sender, EventArgs e)
        {
            var senderMessage = contactMessage.Value;
            var senderName = contactName.Value;
            var senderMail = contactEmail.Value;
            var subject = contactSubject.Value;
            var ipAddress = GetIp();


            SmtpClient smtpClient = new SmtpClient();

            NetworkCredential basicCredential = new NetworkCredential("mail@test.com", "pass");

            MailMessage message = new MailMessage();

            MailAddress fromAddress = new MailAddress("mail@test.com");

            smtpClient.Host = "mail.asjspray.com";

            smtpClient.UseDefaultCredentials = false;

            smtpClient.Credentials = basicCredential;

            smtpClient.Port = 587;

            smtpClient.EnableSsl = true;

            message.From = fromAddress;

            message.Subject = subject;

            message.IsBodyHtml = true;

            message.Body = "Gönderici adı: " + senderName + "<br/> Gönderici maili: " + senderMail + "<br/> Gönderici mesajı: " + senderMessage + "<br/> Gönderici ip adresi: " + ipAddress; ;

            message.To.Add("fatihcayir2001@gmail.com");

            message.Bcc.Add("");


            try
            {
                ServicePointManager.ServerCertificateValidationCallback = delegate (object s,
                    X509Certificate certificate,
                    X509Chain chain,
                    SslPolicyErrors sslPolicyErrors)
                {
                    return true;
                };
                if (senderMessage != null && senderName != null &&
                    senderMail != null)
                {
                    smtpClient.Send(message);
                    ScriptManager.RegisterStartupScript(this, GetType(), "CallFunction", "successful();", true);
                    log.Info("Mail gönderme başarılı mail adresi: " + senderMail);
                }
                else if (IsValidEmail(senderMail) == false)
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "CallFunction", "emptyMail();", true);
                    log.Warn("Mail gönderilmedi mail geçersiz " + senderMail);
                }
                else
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "CallFunction", "hata();", true);
                    log.Error("Mail gönderilmedi");
                }
            }
            catch (Exception ex)
            {
                log.Error("Hata, Mail gönderilemedi " + ex.Message);
                Response.Write(ex.Message);
                Page.Response.Write("<script>console.log('" + ex.Message + "');</script>");
            }
        }
    }
}

错误现象

后台btnSendMail_Click方法显示0引用,点击按钮事件不触发。


解决方案

按优先级依次排查以下问题:

  • 检查.aspx页首的Page指令,确认Inherits属性值和后台类的完全限定名一致,即Inherits="AsjSpray.Web.Pages.Iletisim",同时CodeBehind属性指向的cs文件名正确。
  • 确认designer.cs文件中已经生成了btnSendMail控件的定义,若未生成可右键点击aspx页面选择「转换为Web应用程序」,或者手动在designer.cs中添加对应控件声明:
    protected global::System.Web.UI.WebControls.Button btnSendMail;
    
  • 检查页面是否包含前端表单验证逻辑拦截了按钮的提交行为,可临时移除页面上所有无关前端JS,测试按钮点击是否触发后台事件。
  • 清理解决方案后重新生成项目,Visual Studio的静态引用计数有时会出现缓存错误,重新生成后确认引用计数是否更新。
  • 确认按钮所在容器没有设置OnClick事件冒泡阻断,也没有其他服务端控件的验证逻辑(如RequiredFieldValidator)未通过导致提交被拦截,可临时给按钮添加CausesValidation="false"属性测试。

内容的提问来源于stack exchange,提问作者fatihcayir2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:24:03