Tengo un formulario web enorme con muchos cuadros de texto y, al hacer clic en el cliente, los datos deben enviarse por correo electrónico a la empresa.

En la actualidad, estoy codificando y concatenando el cuerpo del mensaje con referencias directas a los distintos cuadros de texto, sin embargo, esto es mucho tipeo y sería una molestia cambiarlo.

string body = "Name: " + tbName.Text + "\n" ...;

Así que puse el formulario en un objeto que tiene un montón de propiedades de cadena y dos bool (si es necesario, podría cambiarse a cadena) pero tengo un problema para poner todas las propiedades del objeto en una sola cadena para el cuerpo del correo electrónico.

Y así sucesivamente, para

CompanyClass myObj = new CompanyClass();
myObj.Name = tbName.Text;
string body = //where I'm looking to put the object into a function as an  argument.

Esto viene de:

public class CompanyClass
{ 
   public string Name {get;set;}
   public string ...

   public CompanyClass(string nme, ...)
   {
       Name = name;
   }
   public ObjToString(myObj)
   {
      // where I am having issue
   }
}

Es posible? La velocidad no es un problema, ya que es solo una forma.

Salud.

c#
0
SelrekJohn 30 ene. 2015 a las 16:28

2 respuestas

La mejor respuesta

Reflexione sobre las propiedades de su nueva clase y agregue los valores.

foreach(var prop in newObj.GetType().GetProperties()) 
{
    string bodyText = +=  prop.GetValue(newObj, null));

}
1
Peter Marshall 30 ene. 2015 a las 14:23

Defina una matriz de formatos de cadena más objetos de cuadro de texto, haga un bucle con string.Format( all_obj[i].ToString(), ((TextBox)all_obj[i + 1]).Text ) y recopile todas las líneas. Algo como:

StringBuilder res = new StringBuilder();
object all_obj[] = new object[] { "Name: {0}", tbName, ... };
for ( int i = 0; i < all_obj.Length; i += 2 )
    res.AppendFormat( all_obj[i].ToString(), ((TextBox)all_obj[i + 1]).Text );
0
i486 30 ene. 2015 a las 13:34