0

On submit the contact form sends out an email to the specified email address in the web.config file. However at the moment it is posting the ID of the "Selected Services" - how do i get the value rendering instead of the ID? I've tried going through the list after appending the . to see what is available to me, i can't find value.

The values are already defined in Umbraco using a custom datatype.

Here is the surface controller;

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Xml.XPath;
using Umbraco.Core.Services;
using Umbraco.Web.Mvc;

/// <summary>
/// Summary description for ContactSurfaceController
/// </summary>

namespace LiquidThinker2015
{
public class ContactSurfaceController : SurfaceController
{
    public object XPathModeIterator { get; private set; }

    public ActionResult ShowForm()
    {
        ContactModel myModel = new ContactModel();
        List<SelectListItem> ListOfServices = new List<SelectListItem>();
        XPathNodeIterator iterator = umbraco.library.GetPreValues(1435);
        iterator.MoveNext();
        XPathNodeIterator preValues = iterator.Current.SelectChildren("preValue", "");
        while (preValues.MoveNext())
        {
            string preValue = preValues.Current.GetAttribute("id", "");
            ListOfServices.Add(new SelectListItem
            {
                Text = preValues.Current.Value,
                Value = preValues.Current.GetAttribute("id","")
            });
            myModel.ListOfServices = ListOfServices;
        }
        return PartialView("ContactForm", myModel);
    }

    public ActionResult HandleFormPost(ContactModel model)
    {
        var newComment = Services.ContentService.CreateContent(model.Name + " - " + DateTime.Now.ToString("dd/MM/yyyy HH:mm"), CurrentPage.Id, "ContactFormula");

        //DataTypeService myService = new DataTypeService();
        //var SelectedService = myService.GetAllDataTypeDefinitions().First(x => x.Id == 1435);
        //int SelectedServicePreValueId = myService.GetPreValuesCollectionByDataTypeId(SelectedService.Id).PreValuesAsDictionary.Where(x => x.Value.Value == model.SelectedService).Select(x => x.Value.Id).First();


        newComment.SetValue("contactName", model.Name);
        newComment.SetValue("companyName", model.Company);
        newComment.SetValue("emailFrom", model.Email);
        newComment.SetValue("telephoneNumber", model.Telephone);
        newComment.SetValue("dropdownServices", model.SelectedService);
        newComment.SetValue("contactMessage", model.Message);

        Services.ContentService.SaveAndPublishWithStatus(newComment);

        //Send out email
        if (ModelState.IsValid)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("<p>Name: {0}</p>", model.Name);
            sb.AppendFormat("<p>Company: {0}</p>", model.Company);
            sb.AppendFormat("<p>Email: {0}</p>", model.Email);
            sb.AppendFormat("<p>Phone: {0}</p>", model.Telephone);
            sb.AppendFormat("<p>Service: {0}</p>", model.SelectedService); //THIS LINE HERE
            sb.AppendFormat("<p>Message: {0}</p>", model.Message);

            SmtpClient smtp = new SmtpClient();
            MailMessage message = new MailMessage();
            MailAddress ma = new MailAddress(model.Email);

            message.Subject = ConfigurationManager.AppSettings["ContactFormSubject"];
            message.To.Add(new MailAddress(ConfigurationManager.AppSettings["ContactFormTo"]));
            message.CC.Add(new MailAddress(ConfigurationManager.AppSettings["ContactFormCC"]));
            message.From = ma;
            message.Sender = new MailAddress(model.Email);
            message.Body = sb.ToString();
            message.IsBodyHtml = true;

            try
            {
                smtp.Send(message);

            }
            catch (SmtpException smtpEx)
            {
                // Log or manage your error here, then...
                return RedirectToUmbracoPage(1084); // Redirect to homepage.
            }

            return RedirectToUmbracoPage(1454);
        }

        return RedirectToUmbracoPage(1454);
    }
   }
}

Edit:

@co0ke when i do that i get this;

enter image description here

Or should i just try passing in "1435"?

Bart
  • 9,925
  • 7
  • 47
  • 64
mjcoder
  • 1,009
  • 9
  • 25
  • 45

1 Answers1

0

You can use the method on the UmbracoHelper named .GetPreValueAsString(id) and pass in the id of the prevalue.

The UmbracoHelper is available as a property named 'Umbraco' on the PluginController which SurfaceController inherits from.

co0ke
  • 36
  • 3
  • posted a reply above with a image for reference – mjcoder Jan 04 '16 at 10:26
  • @MJCoder - The parameter to the GetValueAsString method needs to be an integer, currently you are trying to pass in a string. Here is some information on how to convert string to int http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int – co0ke Jan 04 '16 at 10:46