Formulário de contato umbraco 7 e MVC

Criando um formulário simples de contato usando MVC e Razor

Se você já está habituado a criar formulários usando MVC e razor não encontrará dificuldades para fazer no Umbraco. A diferença é que a sua classe Controller vai herdar da SurfaceController.

Surface Controller

 Um SurfaceController é uma controller MVC que interage com o processamento front-end de uma página de conteúdo Umbraco. Eles podem ser utilizados para MVC Child Actions e post de formulários. A rota é criada automaticamente. É uma rota específica para não conflitar com a rota de conteúdo.

Exemplo:

/umbraco/surface/{controllername}/{action}/{id} 

Código

Controller:

 public class ContatoSurfaceController : SurfaceController
    {

        [ChildActionOnly]
        public ActionResult ContatoForm()
        {
             var model = new ContatoModel();
            return PartialView("ContatoForm", model);
        }
        [HttpPost]
        public ActionResult ContatoForm(ContatoModel model)
        {
            if (ModelState.IsValid)
            {
                var sb = new StringBuilder();
                sb.AppendFormat("Mensagem: {0}", model.Mensagem);
                sb.AppendFormat("Email do Site: {0}", model.Assunto);
                sb.AppendFormat("Nome: {0}", model.Nome);
                sb.AppendFormat("Email: {0}", model.Email);               
                SmtpClient smtp = new SmtpClient();
                MailMessage message = new MailMessage();

                //Pegando da AppSettings
                //message.To.Add(new MailAddress(ConfigurationManager.AppSettings["EmailContato"]));

                message.To.Add(new MailAddress("email@email.com"));                
                message.Sender = new MailAddress(model.Email);
                message.Body = sb.ToString();
                message.IsBodyHtml = true;

                try
                {
                    smtp.Send(message);
                }
                catch (SmtpException smtpEx)
                {
                   
                    LogHelper.Error("Erro ao enviar email", smtpEx);
                    return RedirectToUmbracoPage(1063); // Id da página de erro
                }

                //Retorna para a página atual
                return RedirectToUmbracoPage(UmbracoContext.PageId.GetValueOrDefault());
            }
            return CurrentUmbracoPage();
        }

    }
 

View Model:

    public class ContatoModel
    {
        [Required]
        public string Assunto { get; set; }
        [Required]
        public string Nome { get; set; }
        [Required]
        public string Email { get; set; }
        public string Mensagem { get; set; }            }

Partial:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<UmbracoBrasil.Models.ContatoModel>

@using (Html.BeginUmbracoForm<UmbracoBrasil.Controllers.ContatoSurfaceController>("Enviar", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label for="contact-form-name">Nome</label>
@Html.TextBoxFor(m => m.Nome, new { @class = "form-control" })
@Html.ValidationMessageFor(x => x.Nome)
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="contact-form-subject">Assunto</label>
@Html.TextBoxFor(m => m.Assunto, new { @class = "form-control" })
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="contact-form-email">E-mail</label>
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(x => x.Email)
</div>
</div>
</div>
<div class="form-group">
<label for="contact-form-message">Mensagem</label>
@Html.TextAreaFor(m => m.Mensagem, new { @class = "form-control", rows = "6" })
@Html.ValidationMessageFor(x => x.Mensagem)
</div>
<button type="submit" class="btn btn-primary pull-right">Enviar</button>
}

 Após criar tudo, adicione no template ou macro o helper que vai renderizar o formulário.

@Html.Action("ContatoForm", "ContatoSurfaceController")

 Esse é um exemplo simples. Para funcionar por completo configure o stmp na web.config.

Referências:

https://creativewebspecialist.co.uk/2013/07/22/umbraco-mvc-what-on-earth-is-a-surface-controller/

http://theshravan.net/blog/child-action-methods-in-asp-net-mvc/

Código Fonte:

https://github.com/marciogoularte/umbracobrasil

 Isso é tudo!