【问题标题】:ASP.NET Web Forms Button does not reference in codebehindASP.NET Web 窗体按钮未在代码隐藏中引用
【发布时间】:2021-12-04 01:19:17
【问题描述】:

我的问题是我的 asp.net 按钮的 onclick 行为不起作用,因为 btnSendMail_Click 后面的代码显示了 0 引用。我在后面添加了我的代码和代码以及我的错误消息。平时这个方法我用过好几次了,这次不行了。

我的一些 html 代码

<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;

            //Set IsBodyHtml to true means you can send HTML email.

            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>");

            }
        }
    }
    }

我的错误图片

Error Image

如您所见,button_click 的引用为 0。

【问题讨论】:

  • 那里的 0 引用 - 它不准确 - 放置一个调试断点并检查发生了什么 - 可能它被调用了。

标签: asp.net button reference webforms zero


【解决方案1】:

您可以仔细检查点击事件。

大多数人没有意识到什么?那么,如果你在 gridview、repeater 等中嵌套一个按钮?

好吧,现在您不能只单击按钮并直接跳到事件存根(它是自动的 - 总是很好)。

但是,您可以让 VS 为您生成事件存根。 (删除按钮标记中现有的 onclick,然后试试这个。

输入 onclick=

当你点击“=”时,intel-sense 应该会弹出这个:

所以,点击创建新事件。看起来什么都没有发生,但是如果您现在翻到后面的代码,那么您会看到代码存根。

试一试 - 你甚至不需要 UseSubmit 行为。

【讨论】:

  • 这不起作用:(我也尝试从设计器生成代码,但它也不起作用。
  • 你是否获得了上面的 intel-sense 来创建新事件?
  • 是的,我总是使用智能感知来创建 OnClick 事件
  • 嗯,也许这是一些对话框,而引导程序把它搞砸了,正如我在另一篇文章中指出的那样,使用 jquery.UI 好很多倍,并且给你更多的控制权。如前所述,jQuery.UI 对话框甚至可以与更新的面板一起使用,因此您可以弹出一个像表单一样工作的“div”,甚至可以在该弹出对话框中进行回发 - 非常适合您的情况。
  • 谢谢,但我必须使用网络表单。我想我会重新安装 Visual Studio
【解决方案2】:

我解决了这个问题。这是因为我在 MasterPage 搜索栏中有“必需”属性。它阻止点击按钮。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2012-05-01
  • 2012-12-04
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多