Я использую страницу контента asp
, которая использует мастер-файл сайта. Меня особенно смущает runat=server
с метками и выполнением vb.net
. Я пробовал это, но это не работает:
<div class = "card-body">
<asp:Label ID = "Label1" runat = "server" />
<div class = "form-group">
<label for = "name">Name</label>
<input type = "text" class = "form-control" id = "name" aria-describedby = "emailHelp" placeholder = "Enter name" required>
</div>
<div class = "form-group" runat = "server">
<asp:Label for = "email" runat = "server" Text = "Email address"></asp:Label>
<input type = "email" class = "form-control" id = "email" aria-describedby = "emailHelp" placeholder = "Enter email" required>
<small id = "emailHelp" class = "form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class = "form-group">
<label for = "message">Message</label>
<textarea class = "form-control" id = "message" rows = "6" required></textarea>
</div>
<div class = "mx-auto">
<asp:Button type = "submit" class = "btn btn-primary text-right" ID = "Btn_SendMessage" runat = "server" Text = "Submit"></asp:Button>
</div>
Я попытался поместить код html
в форму, но ошибки говорят о том, что не может иметь вложенную форму, поэтому я запутался, как отправить код html
в код vb.net
VB.NET
код:
Protected Sub Btn_SendMessage_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim Email As String = FindControl("email").ToString
Dim Name As String = FindControl("name").ToString
Dim Message As String = FindControl("message").ToString
Dim Mail As New MailMessage
Dim SMTP As New SmtpClient("smtp.gmail.com")
Mail.Subject = Name
Mail.From = New MailAddress(Email)
SMTP.Credentials = New System.Net.NetworkCredential("[email protected]", "xxxxxxxx") '<-- Password Here
Mail.To.Add("[email protected]")
Mail.Body = Message
SMTP.EnableSsl = True
SMTP.Port = "587"
Try
SMTP.Send(Mail)
Label1.Text = "Message sent"
Catch ex As Exception
Label1.Text = ex.ToString
End Try
End Sub
Страница обновляется и ничего не происходит, я даже не думаю, что VB.NET
выполняется.
Вот рабочий пример, основанный на вашем коде:
ASPX
<%@ Page Language = "vb" AutoEventWireup = "false" CodeBehind = "WebForm1.aspx.vb" Inherits = "WebApplication2.WebForm1" %>
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
<title></title>
</head>
<body>
<form id = "form1" runat = "server">
<div class = "card-body">
<asp:Label ID = "Label1" runat = "server" />
<div class = "form-group">
<label for = "name">Name</label>
<asp:Label ID = "Label4" runat = "server" AssociatedControlID = "TextBoxName" Text = "Name"></asp:Label>
<asp:TextBox ID = "TextBoxName" runat = "server" CssClass = "form-control" placeholder = "Enter name"></asp:TextBox>
<asp:RequiredFieldValidator ID = "RequiredFieldValidatorName" runat = "server" ErrorMessage = "*" ControlToValidate = "TextBoxName"></asp:RequiredFieldValidator>
</div>
<div class = "form-group" runat = "server">
<asp:Label ID = "Label3" runat = "server" AssociatedControlID = "TextBoxEmail" Text = "Email address"></asp:Label>
<asp:TextBox ID = "TextBoxEmail" runat = "server" CssClass = "form-control" placeholder = "Enter name"></asp:TextBox>
<asp:RequiredFieldValidator ID = "RequiredFieldValidatorEmail" runat = "server" ErrorMessage = "*" ControlToValidate = "TextBoxEmail"></asp:RequiredFieldValidator>
<small id = "emailHelp" class = "form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class = "form-group">
<asp:Label ID = "Label2" runat = "server" AssociatedControlID = "TextBoxMessage" Text = "Message"></asp:Label>
<asp:TextBox ID = "TextBoxMessage" runat = "server" TextMode = "MultiLine" CssClass = "form-control" Rows = "6"></asp:TextBox>
</div>
<div class = "mx-auto">
<asp:Button type = "submit" class = "btn btn-primary text-right" ID = "Btn_SendMessage" runat = "server" Text = "Submit" OnClick = "Btn_SendMessage_Click"></asp:Button>
</div>
</div>
</form>
</body>
</html>
Код позади
Protected Sub Btn_SendMessage_Click(sender As Object, e As EventArgs) Handles Btn_SendMessage.Click
Dim Mail As New MailMessage
Dim SMTP As New SmtpClient("smtp.gmail.com")
Mail.Subject = TextBoxName.Text
Mail.From = New MailAddress(TextBoxEmail.Text)
SMTP.Credentials = New System.Net.NetworkCredential("[email protected]", "xxxxxxxx") '<-- Password Here
Mail.To.Add("[email protected]")
Mail.Body = TextBoxMessage.Text
SMTP.EnableSsl = True
SMTP.Port = "587"
Try
SMTP.Send(Mail)
Label1.Text = "Message sent"
Catch ex As Exception
Label1.Text = ex.ToString
End Try
End Sub
Теги с атрибутом runat = "server"
— это серверные элементы управления ASP.NET, которые отображаются как их HTML-аналоги на результирующей веб-странице, отправляемой в браузер. Во время обработки страницы на стороне сервера вы можете получить к ним доступ в своем коде напрямую, используя их идентификаторы.
Обратите внимание, что я использовал элементы управления проверкой на стороне сервера для обязательных полей. Вам может потребоваться добавить следующий параметр в файл Web.config
на случай, если вы получите ошибку времени выполнения о ненавязчивой проверке:
<appSettings>
<add key = "ValidationSettings:UnobtrusiveValidationMode" value = "None" />
</appSettings>
Надеюсь, поможет. Я использую Visual Studio 2017, а целевой платформой является .NET 4.6.1.
Спасибо за это, мне было трудно это решить, я запустил HTML-код ниже " <form id = "form1" runat = "server">" из-за ошибок этой части (вероятно, из-за того, что это страница ASP с мастер-файлом сайта ), а в остальном все работало отлично, еще раз спасибо :)
Я даже не уверен, что "FindControl("name").ToString" - это правильный способ получить html-контент, это мой первый раз, когда я делаю это