I have a project im working on where I need to create a contact form on each page as a part of the footer..What is the best way to approach this? I have broking my footer into a macro view along with a controller and model. But, for some reason it is not submitting the form. I am using VS 2013 and MVC 4. So, im not sure if I am not doing something incorrectly or not. I am fairly new to mvc. Any feedback would be much appreciated.
Thanks for the reply. I get an error loading the Macro on both articles:
2014-11-18 10:24:20,342 [168] WARN umbraco.macro - [Thread 130] Error loading Partial View (file: ~/Views/MacroPartials/Footer.cshtml). Exception: System.InvalidOperationException: The model item passed into the dictionary is of type 'Umbraco.Web.Models.PartialViewMacroModel', but this dictionary requires a model item of type 'GCFC.Models.ContactModel'.
at System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value)
at System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary)
at System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData)
at Umbraco.Web.Mvc.UmbracoViewPage`1.SetViewData(ViewDataDictionary viewData)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Web.Mvc.ControllerExtensions.RenderViewResultAsString(ControllerBase controller, ViewResultBase viewResult)
at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, IPublishedContent content)
at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, INode node)
at umbraco.macro.LoadPartialViewMacro(MacroModel macro)
at umbraco.macro.renderMacro(Hashtable pageElements, Int32 pageId)
Ok, so what does your code in the controller and the footer.cshtml look like? Could you please share? Sounds like you're missing a dictionary item somewhere but not sure.
Creating Contact Form in Umbraco 7
Hi yall -
I have a project im working on where I need to create a contact form on each page as a part of the footer..What is the best way to approach this? I have broking my footer into a macro view along with a controller and model. But, for some reason it is not submitting the form. I am using VS 2013 and MVC 4. So, im not sure if I am not doing something incorrectly or not. I am fairly new to mvc. Any feedback would be much appreciated.
Thanks,
Dan
Hi Dan
I think you can get some inspiration from these blogposts http://mytechworld.azurewebsites.net/2014/06/quick-and-easy-umbraco-7-razor-contact-form/ and http://carlosmartinezt.com/2014/06/umbraco-7-and-mvc-contact-form/
Hope this helps :)
Oh, and by the way please don't do double posts - It's just going to lead to confusion etc. :)
/Jan
Jan -
Thanks for the reply. I get an error loading the Macro on both articles:
2014-11-18 10:24:20,342 [168] WARN umbraco.macro - [Thread 130] Error loading Partial View (file: ~/Views/MacroPartials/Footer.cshtml). Exception: System.InvalidOperationException: The model item passed into the dictionary is of type 'Umbraco.Web.Models.PartialViewMacroModel', but this dictionary requires a model item of type 'GCFC.Models.ContactModel'.
at System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value)
at System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary)
at System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData)
at Umbraco.Web.Mvc.UmbracoViewPage`1.SetViewData(ViewDataDictionary viewData)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Web.Mvc.ControllerExtensions.RenderViewResultAsString(ControllerBase controller, ViewResultBase viewResult)
at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, IPublishedContent content)
at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, INode node)
at umbraco.macro.LoadPartialViewMacro(MacroModel macro)
at umbraco.macro.renderMacro(Hashtable pageElements, Int32 pageId)
2014-11-18 10:24:21,230 [168] INFO Umbraco.Web.Mvc.UmbracoPageResult - [Thread 130] Finished (took 2370ms)
Hi Dan
Ok, so what does your code in the controller and the footer.cshtml look like? Could you please share? Sounds like you're missing a dictionary item somewhere but not sure.
/Jan
public class ContactSurfaceController : Umbraco.Web.Mvc.SurfaceController
{
[ChildActionOnly]
public ActionResult ContactForm()
{
var model = new ContactModel();
//Initialize model however you want
model.Name = "Enter your name";
//In case you need to access the current node
var currentNode = Umbraco.TypedContent(UmbracoContext.PageId.GetValueOrDefault());
//In case you need to access the home node
var home = currentNode.AncestorsOrSelf(0).First();
return PartialView("ContactForm", model);
}
[HttpPost]
public ActionResult ContactForm(ContactModel model)
{
// server validation here
// TempData["ErrorMessage"] = "Error processing field ...";
if (ModelState.IsValid)
{
var currentNode = Umbraco.TypedContent(UmbracoContext.PageId.GetValueOrDefault());
var homeNode = currentNode.AncestorsOrSelf(0).First();
var sendEmailsFrom = homeNode.GetPropertyValue<string>("sendEmailsFrom") ?? "[email protected]";
var sendEmailsTo = homeNode.GetPropertyValue<string>("sendEmailsTo") ?? "[email protected]";
var body = String.Format("From: {0}, Email: {1}, Tel: {2} and Message: {3}", model.Name, model.Email, model.Phone, model.Message);
var subject = "Travel Concierge - Message Sent";
try
{
umbraco.library.SendMail(sendEmailsFrom, sendEmailsTo, subject, body, true);
TempData["InfoMessage"] = "Your message has been successfully sent and we will be in touch soon...";
// Clear all the form fields
ModelState.Clear();
model.Name = string.Empty;
model.Phone = string.Empty;
model.Email = string.Empty;
model.Message = string.Empty;
//redirect to current page to clear the form
return RedirectToCurrentUmbracoPage();
}
catch (Exception ex)
{
TempData["ErrorMessage"] = ex.Message + ex.StackTrace;
}
}
return CurrentUmbracoPage();
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@inherits Umbraco.Web.Mvc.UmbracoViewPage<GCFC.Models.ContactModel>
@using (Html.BeginUmbracoForm<GCFC.Controllers.ContactSurfaceController>("ContactForm", new { RedirectPage = 1064 }))
{
<div class="row">
<div class="small-10">
<div class="row">
<div class="small-3 columns">
<label for="Name" class="right inline">Name</label>
</div>
<div class="small-9 columns">
<input type="text" placeholder="Your name" id="Name" name="Name" />
</div>
</div>
<div class="row">
<div class="small-3 columns">
<label for="Email" class="right inline">Email</label>
</div>
<div class="small-9 columns">
<input type="email" placeholder="Your email address" id="Email" name="Email" />
</div>
</div>
<div class="row">
<div class="small-3 columns">
<label for="Subject" class="right inline">Subject</label>
</div>
<div class="small-9 columns">
<input type="text" placeholder="Regarding..." id="Subject" name="Subject" />
</div>
</div>
<div class="row">
<div class="small-3 columns">
<label for="Message" class="right inline">Message</label>
</div>
<div class="small-9 columns">
<textarea id="Message" name="Message"></textarea>
</div>
</div>
</div>
<div class="small-10">
<div class="row">
<div class="small-9 small-offset-3 columns">
<input type="submit" class="button tiny" value="Send" />
</div>
</div>
</div>
</div>
}
http://pixeltocode.uk/blog/umbraco/easy-umbraco-forms/
is working on a reply...