【问题标题】:Html button not firing code in behind eventHtml按钮没有在后面的事件中触发代码
【发布时间】:2020-02-15 00:14:01
【问题描述】:

我正在尝试获取一个简单的表单以发布到我的 sql 数据库,但是当我单击它时没有任何反应。我试过 runat="Server, onclick, onserverclick 标记,但没有任何反应。

我是 html 表单的新手,所以不知道我是否应该在实际表单之外使用按钮来执行此操作?非常感谢任何帮助

下面是html代码

            <div class="register-content" ">
                <form  method="POST" class="margin-bottom-0">
                    <label class="control-label">Name <span class="text-danger">*</span></label>
                    <div class="row row-space-10">
                        <div class="col-md-6 m-b-15">
                            <input id="First_Text" type="text" class="form-control" placeholder="First name" required />
                        </div>
                        <div class="col-md-6 m-b-15" >
                            <input id="Last_Text" type="text" class="form-control" placeholder="Last name" required />
                        </div>
                    </div>
                    <label class="control-label">Email <span class="text-danger">*</span></label>
                    <div class="row m-b-15">
                        <div class="col-md-12">
                            <input id="Email_Text" type="text" class="form-control" placeholder="Email address" required />
                        </div>
                    </div>
                    <label class="control-label">Password <span class="text-danger">*</span></label>
                    <div class="row m-b-15">
                        <div class="col-md-12">
                            <input id="Pass_Text" type="password" class="form-control" placeholder="Password" required />
                        </div>
                    </div>
                    <div class="register-buttons">
                        <button runat="server" onserverclick="ValidateUser" type="button" class="btn btn-primary btn-block btn-lg">Sign Up</button>
                    </div>
                    <div class="m-t-20 m-b-40 p-b-40">
                        Already a registered user? Click <a href="login.aspx">here</a> to login.
                    </div>
                    <hr />
                    <p class="text-center">
                        &copy; NZAB All Right Reserved 2019
                    </p>
                </form>
            </div>

这是背后的代码

Protected Sub ValidateUser(sender As Object, e As EventArgs)
    Dim connect As New SqlConnection(ConfigurationManager.ConnectionStrings("NZABFMAD_Users").ToString())
    Using coa As New SqlCommand()
        With coa
            .Connection = connect
            .CommandType = CommandType.Text
        End With
        Try
            connect.Open()
            Dim insertcmd As String
            insertcmd = "INSERT INTO [New_User] (Username,[First name],[Last name],Email,Password) values (@User_Text,@First_Text,@Last_Text,@Email_Text,@Pass_Text)"

            coa.CommandText = insertcmd
            coa.Parameters.AddWithValue("@User_Text", Request.Form("User_Text"))
            coa.Parameters.AddWithValue("@First_Text", Request.Form("First_Text"))
            coa.Parameters.AddWithValue("@Last_Text", Request.Form("Last_Text"))
            coa.Parameters.AddWithValue("@Email_Text", Request.Form("Email_Text"))
            coa.Parameters.AddWithValue("@Pass_Text", Request.Form("Pass_Text"))
            coa.ExecuteNonQuery()
            connect.Close()
            MsgBox("success insert")
        Catch ex As Exception
            MsgBox("Fail to Save to database")
        End Try
    End Using

End Sub

当然,在存储在 sql 中时我会加盐/散列密码,但现在我只想让按钮真正触发事件!

【问题讨论】:

  • 您是否尝试过删除所有代码并仅使用 Protected Sub ValidateUser(sender As Object, e As EventArgs) Console.WriteLine("test") End Sub 之类的函数来查看它是否正在触发但出现某种灾难性的 SQL 错误?
  • 感谢 EGC 的建议,但问题是事件的触发,当我单击时没有任何反应。如果我在表单元素上添加标签 action="home.html",用户将被重定向到页面,但后面的代码没有任何反应
  • @user2301960 如果您使用 ASP.NET 控件,例如 &lt;asp:TextBox&gt;,那么您将能够通过例如First_Text.Text 而不是 Request.Form(...)。

标签: html sql asp.net vb.net


【解决方案1】:

首先,您需要为每个输入字段指定一个name,因为这是在发布到服务器时标识它们的内容。 id 仅用于客户端识别(例如通过 JavaScript)。

<input id="First_Text" name="First_Text" type="text" class="form-control" placeholder="First name" required />

其次,按钮只是调用服务器上的回调。它实际上并没有提交表单,所以在这种情况下Request.Form 将为空。

对于标准 HTML 表单,您需要使用 &lt;input type="submit"/&gt; 以便您的表单被实际提交并将其数据发送到服务器。然后,您可以从 Page_Load 处理程序调用读取其数据。

<div class="register-buttons">
    <input type="submit" class="btn btn-primary btn-block btn-lg" value="Sign up"/>
</div>
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Check if this is a POST request.
    If HttpContext.Current.Request.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase) Then
        DoSignUp()
    End If
End Sub

Private Sub DoSignUp()
    'Put your code from ValidateUser here.
End Sub

尽管like Andrew Morton said in the comments,您可以用 ASP.NET 控件替换表单和输入字段,并改为通过回发处理。我不确定在这种情况下哪种方法更受欢迎,因为我对 WebForms 的工作不多。就我个人而言,我会使用像你现在这样的表格。

【讨论】:

  • 感谢文森特,这让我进步了!现在唯一的问题是 Request.Form 的值仍然是空的有什么想法吗?
  • @user2301960 :嗯,很难说为什么会这样……我下班回来一定要试试这个。
  • @user2301960 :抱歉耽搁了,我昨天很累。原来这个问题很简单,我不知道我是如何忽略它的。您还需要在输入字段上具有 name="..." 属性,因为这是在发布到服务器时标识每个字段的内容。我已经用这个信息更新了我的答案。
  • @user2301960 :很高兴我能帮上忙!祝你的项目好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多