Contact Us Form ASP.net MVC

6.7k views Asked by At

I have created contact us form with the following code:

ConatModels.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace DemoVer1.Models
{
    public class ContactModels
    {
       [Required(ErrorMessage = "First Name is required")] 

        public string FirstName { get; set; }
        public string Supject { get; set; }
        [Required]

        public string Email { get; set; }
        [Required]
        public string Message { get; set; } 

    }
}

HomeController.cs:

   using DemoVer1.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Mail;
    using System.Text;
    using System.Web;
    using System.Web.Mvc;

    namespace DemoVer1.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }

            public ActionResult About()
            {
                ViewBag.Message = "Your application description page.";

                return View();
            }

            public ActionResult Contact(ContactModels c)
            {
                if (ModelState.IsValid)
                {
                    try
                    {
                        MailMessage msg = new MailMessage();
                        SmtpClient smtp = new SmtpClient("smtp.gmail.com");
                        MailAddress from = new MailAddress(c.Email.ToString());
                        StringBuilder sb = new StringBuilder();
                        msg.From = new MailAddress("[email protected]");// replace it with sender email address

                        msg.To.Add("[email protected]");// replace ti with recipient email address
                        msg.Subject = "Contact Us";
                        smtp.EnableSsl = true;

                        smtp.Credentials = new System.Net.NetworkCredential("[email protected]", " email password");
                        smtp.Port = 587;
                        sb.Append("First name: " + c.FirstName);
                        sb.Append(Environment.NewLine);
                        sb.Append("Last name: " + c.Supject);
                        sb.Append(Environment.NewLine);
                        sb.Append("Email: " + c.Email);
                        sb.Append(Environment.NewLine);
                        sb.Append("Comments: " + c.Message);
                        msg.Body = sb.ToString();
                        smtp.Send(msg);
                        msg.Dispose();
                        return View("Success");
                    }
                    catch (Exception)
                    {
                        return View("Error");
                    }
                }
                return View();
            }
        }
    }

Contact.cshtml

  @model DemoVer1.Models.ContactModels
    @{
        ViewBag.Title = "Contact";
    }

    <h1>contact us</h1>
    @using (Html.BeginForm())
    {

        @Html.ValidationSummary(true)
        <div class="row">
            @Html.LabelFor(model => model.FirstName, "First Name:")
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)

        </div>
        <div class="row">
            @Html.LabelFor(model => model.Supject, "Last Name:")
            @Html.EditorFor(model => model.Supject)
        </div>
        <div class="row">
            @Html.LabelFor(model => model.Email, "Email:")
            @Html.EditorFor(model => model.Email)
        </div>
        <div class="row">
            @Html.LabelFor(model => model.Message, "Comments:")
            @Html.TextAreaFor(model => model.Message)
        </div>
        <div class="row">
            <input type="submit" value="submit" />
            <input type="reset" value="reset" />
        </div>

    } 

If I run it, I get an error!I don't know what is the problem. I appreciate your help. Thanks in advance :)

2

There are 2 answers

4
israel altar On

Because the form is a post form you need to write the action like that:

[HttpPost]
public ActionResult Contact(ContactModels c)
            {
//your code
}

As it commented you need to add also a [Get] Action:

[HttpGet]
public ActionResult Contact()
{
    //your code
}
1
Majid joghataey On

Using:

using System;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;
using System.Web.Mvc;
using ProjectName.Models;

Controller:

[HttpPost]
public async Task<ActionResult> Contact(FormCollection C)
{
      string Name = C["name"];
      string Email = C["email"];
      string Message = C["message"];
      if (ModelState.IsValid)
      {
          var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
          var message = new MailMessage();
          message.To.Add(new MailAddress("[email protected]"));  // replace with valid value 
          message.From = new MailAddress("[email protected]");  // replace with valid value
          message.Subject = "Your email subject";
          message.Body = string.Format(body, Name, Email, Message);
          message.IsBodyHtml = true;
          using (var smtp = new SmtpClient())
          {
              var credential = new NetworkCredential
                  {
                        UserName = "[email protected]",  // replace with valid value
                        Password = "********"  // replace with valid value
                  };
                  smtp.Credentials = credential;
                  smtp.Host = "webmail.Domain.com";//address webmail
                  smtp.Port = 587;
                  smtp.EnableSsl = false;
                  await smtp.SendMailAsync(message);
                  return RedirectToAction("Index");
              }
        }
              return View();
}

settings to web.config:

<system.net>
  <mailSettings>
    <smtp from="[email protected]">
      <network host="webmail.Domain.com" 
               port="587" 
               userName="[email protected]"
               password="password" 
               enableSsl="false" />
    </smtp>
  </mailSettings>
</system.net>

view:

@using (Html.BeginForm("Contact", "Home", FormMethod.Post, new { @class = "contact-list", id = "contacts_form", role = "form", target = "_blank" }))
{
     @Html.TextBox("name", null, new { @class = "form_item", @required = "required", placeholder = "Name", type = "text" })
     @Html.TextBox("email", null, new { @class = "form_item", @required = "required", placeholder = "E-mail", type = "email" })
     @Html.TextBox("message", null, new { @class = "form_item", @required = "required", placeholder = "Message", type = "text" })
     <input type="submit" value="subscribe" />
  }