Как заполнить данные в классе ASP.NET MVC 5.2 с помощью начальной загрузки формы «свяжитесь с нами» на мою электронную почту? - PullRequest
0 голосов
/ 01 января 2019

У меня есть сайт со страницей «Свяжитесь с нами», и я хочу, чтобы мои пользователи могли использовать эту форму для отправки мне электронного письма.Моя электронная почта, конечно, не отображается, но у меня есть пользователь, чтобы поместить свое имя, фамилию, адрес электронной почты и сообщение в форму начальной загрузки 4.xxx (последняя) и нажать кнопку отправить.Однако, когда я нажимаю кнопку отправить, данные не заполняются в методе ActionResult в моем HomeController.

Я также заметил ошибку с отправкой при включении функции javascript, ошибка равна нулю.Я нахожусь в процессе использования Route-Config, чтобы помочь перехватить данные, но я не уверен, какой путь является правильным в этой точке.Я не хочу использовать Html помощники (только HtmlBeginForm).

У меня было много итераций, и это не совсем лучший вариант, но этого достаточно, чтобы увидеть мои проблемы.

HomeController:

 [HttpPost]
    public async Task<ActionResult> Email(FormCollection form)`enter code here`
    {
        var firstName = form["firstName"];
        var lastName = form["lastNname"];
        var email = form["senderEmail"];
        var message = form["emailMessage"];
        var x = await ContactForm(firstName, lastName, email, message);
        return RedirectToAction("Send");
    }

    private async Task<ActionResult> ContactForm(string firstName, string lastName, string email, string message)
    {
        try
        {
            MailMessage messages = new MailMessage();
            messages.To.Add("marketing@gmail.com");
            messages.From = new MailAddress(email);
            messages.Subject = "Contact Page Email";
            messages.Body = message;
            messages.IsBodyHtml = true;

            using (var smtp = new SmtpClient())
            {
                var credential = new NetworkCredential
                {
                    UserName = "marketing@gmail.com",
                    Password = "*****"
                };
                smtp.Credentials = credential;
                smtp.Host = "smtp-mail-outlook.com";
                smtp.Port = 587;
                smtp.EnableSsl = true;
                await smtp.SendMailAsync(messages);

            }
        }
        catch (Exception ex)
        ... 

HTML:

 @using (Html.BeginForm("Email", "Home", FormMethod.Post))
                {
                    <form name="sendMessage" id="contactForm">                           
                        <div class="form-row">
                            <div class="col">
                                <label for="firstName">First Name:</label>
                                <input type="text" class="form-control" placeholder="First Name" id="firstName" name="firstName">
                                <div class="invalid-feedback">Enter a first name.</div>
                            </div>
                            <div class="col">
                                <label for="lastName">Last Name:</label>
                                <input type="text" class="form-control" placeholder="Last Name" id="lastName" name="lastName">
                                <div class="invalid-feedback">Enter a last name.</div>
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="inputEmail">Email Address:</label>
                            <input type="email" class="form-control" id="email" placeholder="username@emailaddress.com" name="senderEmail">
                        </div>

                        <div class="form-group">
                            <label for="emailMessage">Message:</label>
                            <textarea class="form-control" id="message" rows="5" name="emailMessage"></textarea>
                            <div class="invalid-feedback">Enter a message.</div>
                        </div>

                        <button type="submit" class="btn btn-primary btn-lg " onclick="myFunction()">Send</button>
                    </form>

Электронная почта с именем, фамилией, адресом отправителя, сообщением в моем почтовом ящике.

1 Ответ

0 голосов
/ 01 января 2019

Вы используете FormCollection в своем методе Email, который требует, чтобы cshtml имел параметр name для полей, отсутствующих в вашем коде.

Кроме того, вам не требуется функция javascript для отправки формыесли вы не хотите вмешиваться и делать некоторые проверки.Поэтому, пожалуйста, попробуйте удалить это также.

Пожалуйста, попробуйте изменить ваш cshtml ниже:

@using (Html.BeginForm("Email", "Home", FormMethod.Post))
{
    <div class="form-row">
        <div class="col">
            <label for="firstName">First Name:</label>
            <input type="text" class="form-control" placeholder="First Name" id="firstName" name="firstName">
            <div class="invalid-feedback">Enter a first name.</div>
        </div>
        <div class="col">
            <label for="lastName">Last Name:</label>
            <input type="text" class="form-control" placeholder="Last Name" id="lastName" name="lname">
            <div class="invalid-feedback">Enter a last name.</div>
        </div>
    </div>

    <div class="form-group">
        <label for="inputEmail">Email Address:</label>
        <input type="email" class="form-control" id="email" placeholder="username@emailaddress.com" name="senderEmail">
    </div>

    <div class="form-group">
        <label for="emailMessage">Message:</label>
        <textarea class="form-control" id="message" rows="5" name="smessage"></textarea>
        <div class="invalid-feedback">Enter a message.</div>
    </div>

    <button type="submit" class="btn btn-primary btn-lg">Send</button>
}
...