Возврат сообщения после отправки формы - PullRequest
0 голосов
/ 31 января 2012

Извините, если это было опубликовано ранее.Я искал много сайтов и форм, чтобы исправить это, но я не могу получить его.У меня есть простая контактная форма, которая позволяет потенциальным клиентам заполнить их информацию, нажмите кнопку «Отправить», а затем отправьте по электронной почте копию того, что они нам ввели.У меня электронная часть работает нормально.Однако часть, которая не работает - это сообщение после отправки формы.Я пытаюсь использовать попытку и ловить, чтобы отобразить сообщение, когда они отправляют, или сообщение об ошибке, когда оно не работает.Не уверен, почему это не работает.Спасибо вам за помощь.Код моего контроллера ниже.

public ActionResult ContactForm()
{
    return View();
}
public ActionResult Message()
{
    return View();
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactForm(ContactModel emailModel)
{
    if (ModelState.IsValid)
    {
    bool isOk = false;
    try
    {
        MailMessage msg = new MailMessage();
        msg.From = new MailAddress("no-reply@bobcravens.com",  "Website Contact Form");
        msg.To.Add("thovden@hovdenoil.com");
        msg.Subject = emailModel.Subject;
        string body = "Name: " + emailModel.Name + "\n"
                    + "Email: " + emailModel.Email + "\n"
                    + "Website: " + emailModel.Website + "\n"
                    + "Phone: " + emailModel.Phone + "\n\n"
                    + emailModel.Message;

        msg.Body = body;
        msg.IsBodyHtml = false;

        SmtpClient smtp = new SmtpClient("smtpout.server.net", 25);
        NetworkCredential Credentials = new NetworkCredential("thovden@hovdenoil.com", "****");
        smtp.Credentials = Credentials;
        smtp.Send(msg);
        msg.Dispose();
        isOk = true
        ContactModel rcpt = new ContactModel();
        rcpt.Title = "Thank You";
                    rcpt.Content = "Your email has been sent.";
                    return View("Message", rcpt);
        }
        catch (Exception ex)
        {
        }
        // If we are here...something kicked us into the exception.
        //
       ContactModel err = new ContactModel();
        err.Title = "Email Error";
        err.Content = "The website is having an issue with sending email at this time. Sorry for the inconvenience. My email address is provided on the about page.";
        return View("Message", err);
        }
        else
        {
            return View();
        }
    }
 }

Ответы [ 2 ]

1 голос
/ 31 января 2012

Проблема в том, что вы возвращаете:

return View("Messgae", err):

Вы должны вернуть то же представление после ошибки на «postback», с недопустимой моделью

return View(err);

Однажды вы вызываете это Message представление с помощью MessageModel, и в этой строке вы вызываете это с ContactModel, поэтому здесь должна быть ошибка ...

Примечания:

  • Вы ловите глобальное исключение Exception, это не очень хорошая практика. Не каждое исключение вы можете и должны обработать.
  • У вас есть флаг isOK, который ничего не делает.
  • Переместите исключение Генделя в блок catch, а не потом

Обновлено на основе комментариев:

Вместо возврата View вы должны перенаправить:

return RedirectToAction("Message", err);
return RedirectToAction("Message", rcpt);

public ActionResult Message(ContactModel model)
{
    return View(model);
}
0 голосов
/ 31 января 2012

Я бы начал с выдачи исключения, чтобы вы могли точно выяснить, что пошло не так.Кроме того, вы можете пошагово пройти по коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...