كيفية قراءة HTML خارج صفحة ويب واستخدامها كجسم من البريد الإلكتروني HTML

StackOverflow https://stackoverflow.com/questions/1507351

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أعمل على البريد الإلكتروني لجهاز HTML التلقائي. إذا كانت هناك طريقة أبسط مما أفعله، فيرجى إخبارنا بذلك.

حتى الآن، لقد بنيت "pagename.aspx" وقرأت هذه الصفحة في متغير سلسلة، ثم استخدم هذا المتغير كهيئة البريد. هذا يعمل.

تقبل الصفحة اختياريا استنساخ يسمى "LEARDID". يستخدم هذا لسحب البيانات من قاعدة بيانات وملء الحقول في هذه الصفحة. هذا يعمل أيضا بشكل جيد عندما أستعرض يدويا إلى الصفحة - Pagename.aspx؟ LightID = XYZ

مشكلتي / سؤال هو, ، كيف يمكنني تمرير هذا الاستعلام إلى الصفحة وإعادة إخراج HTML الناتج من الصفحة إلى سلسلة، والتي يمكن بعد ذلك استخدامها كهيئة بريدي الإلكتروني.

مرة أخرى، إذا كانت هناك طريقة أفضل، فيرجى إخبارنا بذلك. أنا أستخدم LinQ إلى SQL، VB.NET و ASP.NET 3.5.

مليون شكرا.

هل كانت مفيدة؟

المحلول

أسهل طريقة هي فقط للقيام WebRequest لذلك:

string url = "...";
string result;

HttpWebRequest webrequest = (HttpWebRequest) HttpWebRequest.Create(url);
webrequest.Method        = "GET";
webrequest.ContentLength = 0;

WebResponse response = webrequest.GetResponse();

using(StreamReader stream = new StreamReader(response.GetResponseStream())){
    result = stream.ReadToEnd();
}

نصائح أخرى

كما وصفت في هذه المادة, ، يمكنك استخدام فئة HTTPWebRequest لاسترداد دفق البيانات من صفحتك "Pagename.aspx؟ LeadID = 1". ولكن هذا قد يسبب القليل من النفقات العامة لتطبيقك بسبب طلب HTTP إضافي.

لن تكون ممكنا / أفضل لتوليد محتوى HTML الخاص بك من فئة بسيطة؟ ما المحتوى ينشئ صفحتك؟

تحرير: كما هو مطلوب من قبل خالد هنا فئة بسيطة لتوليد ملف HTML ديناميكي باستخدام المعلمة المترتبة الخاصة بك وتحويل التحكم GridView. إنه على سبيل المثال فقط، ستحتاج إلى مخصصه وجعل أكثر قابلة لإعادة الاستخدام:

using System;
using System.Text;
using System.IO;
using System.Web.UI.WebControls;
using System.Web.UI;

public class PageBroker
{

    /*
     * How to use PageBroker:
     * 
     *  string leadID = "xyz"; // dynamic querystring parameter
     *  string pathToHTML = Server.MapPath(".") + "\\HTML\\leadForm.html"; //more detail about this file below
     *  PageBroker pLeadBroker = new PageBroker(pathToHTML, leadID);  
     *  Response.Write(pLeadBroker.GenerateFromFile()); // will show content of generated page
     */

    private string _pathToFile;
    private StringBuilder _fileContent;
    private string _leadID;

    public PageBroker(string pathToFile, string leadID)
    {
        _fileContent = new StringBuilder();
        _pathToFile = pathToFile;
        _leadID = leadID;
    }

    public string GenerateFromFile() {
        return LoadFile();
    }
    private string LoadFile()
    {
        // Grab file and load content inside '_fileContent'
        // I used an html file to create the basic structure of your page
        // but you can also create
        // a page from scratch.
        if (File.Exists(_pathToFile))
        {
            FileStream stream = new FileStream(_pathToFile, FileMode.Open, FileAccess.Read);
            StreamReader reader = new StreamReader(stream);
            while (reader.Peek() > -1)
                _fileContent.Append(reader.ReadLine() + "\n");
            stream.Close();
            reader.Close();

            InjectTextContent();
            InjectControlsContent();
        }        
        return _fileContent.ToString();
    }

    // (Ugly) method to inject dynamic values inside the generated html
    // You html files need to contain all the necesary tags to place your
    // content (for example: '__USER_NAME__')
    // It would be more OO if a dictionnary object was passed to the 
    // constructor of this class and then used inside this method 
    // (I leave it hard-coded for the sake of understanding but 
    // I can give you a more detailled code if you need it).
    private void InjectTextContent() {
        _fileContent.Replace("__USER_NAME__", "Khalid Rahaman");
    }

    // This method add the render output of the controls you need to place
    // on the page. At this point you will make use of your leadID parameter,
    // I used a simple array with fake data to fill the gridview.
    // You can add whatever control you need.
    private void InjectControlsContent() {
        string[] products = { "A", "B", "C", "D" };
        GridView gvProducts = new GridView();
        gvProducts.DataSource = products;
        gvProducts.DataBind();

        // HtmlTextWriter is used to write HTML programmatically. 
        // It provides formatting capabilities that ASP.NET server 
        // controls use when rendering markup to clients 
        // (http://msdn.microsoft.com/en- us/library/system.web.ui.htmltextwriter.aspx)
        // This way you will be able to inject the griview's 
        // render output inside your file.
        StringWriter gvProductsWriter = new StringWriter();
        HtmlTextWriter htmlWrit = new HtmlTextWriter(gvProductsWriter);
        gvProducts.RenderControl(htmlWrit);
        _fileContent.Replace("__GRIDVIEW_PRODUCTS__", gvProductsWriter.ToString());
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top