Get Value from Dropdown List in MVC

433 Views Asked by At

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"?

1

There are 1 best solutions below

2
On

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.