C# 值没有从javascript传递到codebehind asp.net?

C# 值没有从javascript传递到codebehind asp.net?,c#,javascript,asp.net,c#-4.0,smtp,C#,Javascript,Asp.net,C# 4.0,Smtp,编辑: 我试过使用mail.Body=TextBox2.Text; mail.To.Add(TextBox1.Text); 我试过没有更新面板 代码在CSS弹出窗口中,这是主要问题 正如我所建议的,我使用了html按钮来调用javascript函数 public void LinkButton6_Click(object sender, EventArgs e) { try{ System.Net.Mail.MailMessage mail = new Syst

编辑:

  • 我试过使用
    mail.Body=TextBox2.Text;
    mail.To.Add(TextBox1.Text);
    

  • 我试过没有更新面板

  • 代码在CSS弹出窗口中,这是主要问题

  • 正如我所建议的,我使用了html按钮来调用javascript函数

     public void LinkButton6_Click(object sender, EventArgs e) { 
    
     try{
                System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
                mail.Subject = "";
                mail.Body = HiddenField1.Value;
                mail.To.Add(HiddenField2.Value);
    
                ////send the message
    
                System.Net.Mail.SmtpClient mySmtpClient = new System.Net.Mail.SmtpClient();
                System.Net.NetworkCredential myCredential = new System.Net.NetworkCredential("","");
                //mySmtpClient.Port="25";
                mySmtpClient.Host = "";
                mySmtpClient.UseDefaultCredentials = false;
                mySmtpClient.Credentials = myCredential;
                mySmtpClient.Send(mail);
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            } 
    
    如何在Asp.net中将此值作为凭据传递


    请帮助

    是否要直接从codebehind上的文本框中读取值

      function btn_click() {
            var email = document.getElementById('HiddenField1').value;
            var body = document.getElementById('HiddenField2').value;
    
        }
    

    您正在将电子邮件地址输入TextBox2,然后将其复制到HiddenField1,但在代码隐藏中读取地址的HiddenField2。类似地,您将邮件正文输入TextBox1,然后将其复制到HiddenField2,但随后在代码隐藏中读取HiddenField1(客户端上1和2之间的这种交换是不必要的混淆)。在测试隐藏字段中的值时,您是否用数据填充两个文本框?

    首先,我认为您应该删除隐藏字段和与之相关的任何内容(javascript函数)。重点关注问题的原因而不是解决方案,问题在于文本框值没有返回到服务器。当您最终让它使用隐藏字段时,问题可能仍然存在。尽管您已经发现隐藏字段与原始文本框存在相同的问题

    隔离问题:

    1) 这些值是否实际发布到服务器?(您可以使用浏览器内置开发工具或类似HttpWatch的插件来验证这一点,在最坏的情况下,您可以使用嗅探器)

    2) 通过关闭ajax/updatepanel功能,确保updatepanel不会干扰。(您可以通过在ScriptManager(通常位于母版页)上将EnablePartialRendering设置为false来实现此目的)。虽然这不重要

    3) 当您验证了正确的值实际上已发布到服务器时,请确保页面加载(或类似函数)中没有奇怪的逻辑覆盖在OnLoad之前处理的回发值。这可能是一些初始化,应该只在不是回发时运行

    4) 确保处理回发变量时控件存在,否则回发值将被忽略。您注意到代码位于“CSS弹出窗口”中,请确保在处理回发变量时此弹出窗口存在(在控件集合中)

    mail.Body = TextBox1.Text;
    

    这应该对你有好处:)

    你为什么不在codebehind中简单地使用TextBox值呢?我尝试过它不起作用,所以尝试过使用同样的错误也会在这里发生,这是在UserControl中还是在你的代码示例中有其他不明显的东西?@jrummell是我认为可能导致错误的唯一控件提交时不存在的值将是
    UpdatePanel
    。然而,在这种情况下,OP似乎使用了一个链接来提交,但这不起作用。我也尝试过,我没有使用更新面板,我已经停止使用asp.net按钮,我使用的是提交按钮,而不是“var email=document.getElementById('HiddenField1')。value;var body=document.getElementById('HiddenField2')。value;'是否有办法将此传输到smtp处理
      function btn_click() {
            var email = document.getElementById('HiddenField1').value;
            var body = document.getElementById('HiddenField2').value;
    
        }
    
    mail.Body = TextBox1.Text;
    
    <script type="text/javascript">
     function SendForm() {
    
            var email = $get("TextBox2").value;
            var message = $get("TextBox1").value;
    
            PageMethods.SendForm(email, message,
       OnSucceeded, OnFailed);
        }
    
        function OnSucceeded() {
            // Dispaly "thank you."
            $get("ContactFieldset").innerHTML = "<p>Thank you!</p>";
        }
    
        function OnFailed(error) {
            // Alert user to the error.
            alert(error.get_message());
        }
    </script>
    
     [WebMethod]
    public static void SendForm(string email, string message)
    {
    
    
        System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
            mail.Subject = "";
            mail.From = new MailAddress("");
            mail.Body = message;
            mail.To.Add(email);
    
            ////send the message
    
            System.Net.Mail.SmtpClient mySmtpClient = new System.Net.Mail.SmtpClient();
            System.Net.NetworkCredential myCredential = new System.Net.NetworkCredential("","");
            //mySmtpClient.Port="25";
            mySmtpClient.Host = "";
            mySmtpClient.UseDefaultCredentials = false;
            mySmtpClient.Credentials = myCredential;
            mySmtpClient.Send(mail);
    
    
    
        if (string.IsNullOrEmpty(email))
        {
            throw new Exception("You must supply an email address.");
        }
    
        if (string.IsNullOrEmpty(message))
        {
            throw new Exception("Please provide a message to send.");
        }
    
        // If we get this far we know that they entered enough data, so
        // here is where you would send the email or whatever you wanted
        // to do :)
    }