सी # + एचटीएमएल ईमेल टेम्पलेट में डेटाटेबल पंक्ति संलग्न करें

मेरे पास रिकॉर्ड का डेटाटेबल है जिसे मुझे अपने ईमेल टेम्पलेट एचटीएम में जानकारी के रूप में जोड़ना होगा। वर्तमान में मैं यहां क्या कर रहा हूं ठीक काम करता है लेकिन यह है कि अगर मेरे पास केवल 1 पंक्ति रिकॉर्ड है। मैं एचटीएम टेम्पलेट को जोड़ने के बारे में कैसे जा सकता हूं जैसे कि मैं ईमेल में एकाधिक पोस्टिंग कर सकता हूं

उदाहरण नमूना ईमेल स्क्रीन (मेरा डेटाटेबल मानते हुए रिकॉर्ड की 3 पंक्तियां लौटाती हैं) :

Dear Sir, your daily car posting results:

Image
Toyota
Cambry
$10000

Image
Honda
GT
$10000

Image
Nissan
Sunny
$10000

लूप डेटाटेबल पंक्ति:

 for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DataRow dr = dt.Rows[i];

                    primaryImage = dr["PrimaryImage"].ToString();
                    email = dr["Email"].ToString();
                    postTitle = dr["Model"].ToString();
                    model = dr["Model"].ToString();
                    askingPrice = dr["AskingPrice"].ToString();

                    var mail = new Email();
                    mail.IsBodyHtml = true;
                    mail.MailAddresses = email;
                    mail.MailSubject = "Test";

                    mail.HtmFileName = "Email.htm";
                    var dict = new Dictionary
                                   {
                                       {"<%PrimaryImage%>", primaryImage },
                                       {"<%PostTitle%>", postTitle},
                                       {"<%Model%>", model},
                                       {"<%AskingPrice%", askingPrice}
                                   };
                    mail.Dict = dict;

                    MailMessage mailMessage;
                    mailMessage = mail.CreateMailMessage();
                    Email.Send(mailMessage, 3, 3000, true);
                    }
                }

मेल संदेश बनाएं:

public MailMessage CreateMailMessage()
        {
            MailMessage mail = new MailMessage();
            mail.IsBodyHtml = IsBodyHtml;
            mail.From = new MailAddress("[email protected]", "xxx");
            mail.Bcc.Add(MailAddresses);
            mail.Subject = MailSubject;
            string body = "";
            string filePath =
               HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.AppSettings["TEMPLATES"] + "/");

            if (File.Exists(filePath + HtmFileName))
            {
                FileStream f = new FileStream(filePath + HtmFileName, FileMode.Open);
                StreamReader sr = new StreamReader(f);
                body = sr.ReadToEnd();
                foreach (var pair in Dict)
                {
                    body = body.Replace(pair.Key, pair.Value);
                }
                f.Close();
            }

            mail.Body = body;
            mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess |
                                               DeliveryNotificationOptions.OnFailure;
            return mail;
        }

ईमेल.htm टेम्पलेट का भाग:

<body>
    <form id="form1" runat="server">
        <div style="border: thin solid #E1E1E1; background-color: #F0F0F0; margin-bottom: 10px; padding-top: 3px; padding-bottom: 3px; padding-left:5px;">
            Postings
        </div>
        <div>
              
            

Sell Post Title: <%PostTitle%>

Model: <%Model%>

Asking Price: <%AskingPrice%> </div> </form> </body>
0

2 उत्तर

मैंने htmlcontent तैयार करने और इस तरह की चीजों को प्राप्त करने के लिए हमेशा HtmlAgilityPack का उपयोग किया है।

 private string PrepareHtmlContent(List dataTable)
    {

        var htmlDocument = new HtmlDocument();
        var html = EmailTemplates.GetTemplate("yourTemplate");
        htmlDocument.LoadHtml(html);
        var recordsContainerNode = htmlDocument.GetElementbyId("dataTable");

        if (recordsContainerNode != null)
        {
            var innerHtml = "";

            foreach (var entry in dataTable)
            {

                innerHtml += "<tr>";

                innerHtml += "<td>" + entry.PrimaryImage + "</td> ";
                innerHtml += "<td>" + entry.Model + "</td> ";
                innerHtml += "<td>" + entry.AskingPrice + "</td> ";
                innerHtml += "</tr>";
            }


            recordsContainerNode.InnerHtml = innerHtml;
        }

     using (var stringWriter = new StringWriter())
        {
            htmlDocument.Save(stringWriter);
            return stringWriter.GetStringBuilder().ToString();
        }
 }

और आपका टेम्पलेट इस तरह sth होना चाहिए

<body> <form id="form1" runat="server"> <div style="border: thin solid #E1E1E1; background-color: #F0F0F0; margin-bottom: 10px; padding-top: 3px; padding-bottom: 3px; padding-left:5px;"> Postings </div> <table> <thead> </thead> <tbody id="dataTable"> </tbody> </table> </form> </body>

0
जोड़ा
आप टीडी कैसे जोड़ रहे हैं? विशेषता जोड़ने का एक तरीका है HtmlNode ऑब्जेक्ट नोड पर SetAttribute विधि का उपयोग कर। SetAttributeValue ("शैली", मान)
जोड़ा लेखक Sameer, स्रोत
आप कैसे परिभाषित करते हैं कि कौन सी विशेषता टीडी है? क्या आप मुझे अपना कोड भेज सकते हैं?
जोड़ा लेखक Sameer, स्रोत
क्या आप कृपया बता सकते हैं कि गुणों को दो अलग-अलग <td> में कैसे जोड़ना है?
जोड़ा लेखक M.S, स्रोत
मैं आपके द्वारा दिए गए उदाहरण का उपयोग कर रहा हूं। फोरच में 3 एचडी को आंतरिक एचटीएमएल में जोड़ना। लेकिन मेरे पास प्रत्येक टीडी के लिए अलग विशेषता है। अब मैं टीडी में स्ट्रिंग के रूप में डाल रहा हूँ। जैसे "<td width = \" 72% \ "align = \" left \ "valign = \" top \ ">"। क्या कोई अन्य कुशल तरीका है?
जोड़ा लेखक M.S, स्रोत
मैं केवल आपके कोड का उपयोग आंतरिक HTML + = "<td width = \" 72% \ "align = \" left \ "valign = \" top \ ">" प्रविष्टि। प्राथमिक Image + "</td>" के साथ कर रहा हूं; मैं नहीं जानता कि प्रत्येक टीडी में विशेषता को अलग-अलग कैसे परिभाषित किया जाए। यही वह है जिसके साथ मुझे आपकी मदद चाहिए।
जोड़ा लेखक M.S, स्रोत

@ एमएस: इस शर्त के आधार पर कुछ शर्त होनी चाहिए कि आप तय करेंगे कि कौन सी विशेषता टीडी है। आप इस तर्क को कुछ विधि में लपेट सकते हैं और कक्षा का नाम उत्पन्न कर सकते हैं। नीचे एक तरीका है कि आप राउनम के आधार पर कक्षा का नाम कैसे बनाते हैं।

var className="" ;
var rowNum=0;       
foreach (var entry in dataTable)
    {
        className=GetClassName(rowNum)
        innerHtml += "<tr>";
        innerHtml += "<td class='"+ className +"'>" + entry.PrimaryImage + "</td> ";
        innerHtml += "</tr>";
        rowNum++;
    }

public static string GetClassName(int rowCount)
{
    switch (rowCount)
    {
        case 1:
            return "class1";
        case 2:
            return "class2";
        case 3:
            return "class3";
        default:
            return "unassignedClass";
    }
}
0
जोड़ा
धन्यवाद @ समीर। मुझे एक विचार देता है कि इसे कैसे हल किया जाए। महान!! यह कोशिश करेंगे।
जोड़ा लेखक M.S, स्रोत