Как заполнить данные в классе ASP.NET MVC 5.2 с помощью начальной загрузки, свяжитесь с нами по электронной почте?

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

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

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

Домашний контроллер:

 [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("[email protected]");
            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 = "[email protected]",
                    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="[email protected]" 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>

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


person John    schedule 01.01.2019    source источник


Ответы (1)


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

Кроме того, вам действительно не требуется функция 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="[email protected]" 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>
}
person Priyank Panchal    schedule 01.01.2019
comment
Я поменял еще до поста. Я не спал всю ночь. Я слишком устал, чтобы менять его на пост. Я исправлю это здесь в ближайшее время. Я добавил javascript, потому что думал, что это поможет заполнить форму, но это не помогло. - person John; 01.01.2019
comment
также предоставьте содержимое вашего файла RouteConfig.cs, чтобы его также можно было проверить. - person Priyank Panchal; 01.01.2019
comment
Спасибо за помощь. Мне нужно изменить этот пост. Плохая публикация, когда вы устали. Я немного отдохну и повторю вопрос. - person John; 01.01.2019
comment
У вас есть две формы. Попробуйте избавиться от этого <form name="sendMessage" id="contactForm"></form> - person Tyddlywink; 16.07.2019
comment
@Tyddlywink, хорошо замечено, я проглядел. Отредактировал ответ сейчас. Глядя на последний комментарий OP, я думаю, что его не интересовало решение, поэтому я отказался от него. - person Priyank Panchal; 16.07.2019
comment
@PriyankPanchal Я в шоке. Этот комментарий предназначался для его вопроса. Но и это сработает. Если он заинтересован в решении, вы должны сделать это за него сейчас. Спасибо. - person Tyddlywink; 16.07.2019