0

Sur soumettre le formulaire de contact envoie un e-mail à l'adresse e-mail spécifié dans le fichier web.config. Cependant, en ce moment, il affiche l'identifiant des "Services sélectionnés" - comment puis-je obtenir le rendu de la valeur au lieu de l'ID? J'ai essayé de parcourir la liste après avoir ajouté le. pour voir ce qui est disponible pour moi, je ne peux pas trouver de la valeur.Obtenir la valeur à partir de la liste déroulante dans MVC

Les valeurs sont déjà définies dans Umbraco à l'aide d'un type de données personnalisé.

Voici le contrôleur de surface;

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 quand je fais ce que je reçois ce;

enter image description here

Ou devrais-je essayer de passage dans "1435"?

Répondre

0

Vous pouvez utiliser la méthode sur le UmbracoHelper nommé .GetPreValueAsString (id) et transmettre l'ID de la prévalence. Le UmbracoHelper est disponible en tant que propriété nommée 'Umbraco' sur le PluginController dont le SurfaceController hérite.

+0

a posté une réponse au-dessus avec une image pour la référence – MJCoder

+0

@MJCoder - Le paramètre à la méthode GetValueAsString doit être un entier, actuellement vous essayez de passer dans une chaîne. Voici quelques informations sur la façon de convertir la chaîne en int http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int – co0ke