定义类来生成HTML文件

本文关键字:HTML 文件 定义 | 更新日期: 2023-09-27 18:08:52

我正在尝试使用类生成HTML文件,但它不生成多个HTML标签,我想知道你是否能告诉我我能做些什么,以便在我的HTML文件中生成多个标签。下面是代码:

public class GuidClass
{
    public string htmlstringfirst = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY>";
    public string htmlstringend = "</form></BODY></HTML>";
    public string htmlstring = "";
    public GuidClass(string title, string type, string defaultvalue)
    {
        htmlstring += "'r'n<input id = " + '"' + System.Guid.NewGuid().ToString() + '"' + "title =" + '"' + title + '"' + "type=" + '"' + type + '"' + ">" + defaultvalue + "</input><br>";
    }
}

private void button1_Click(object sender, EventArgs e)
{            
    GuidClass objGuid = new GuidClass(textBox1.Text, textBox2.Text, textBox3.Text);
    using (FileStream fs = new FileStream(@"D:'test.htm", FileMode.Create))
    {
        using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8))
        {
            writer.Write(objGuid.htmlstringfirst + objGuid.htmlstring + objGuid.htmlstringend);
        }
    }
    htmlLoadWebbrowser1.LoadHTML(@"D:'test.htm");
}

定义类来生成HTML文件

使用web-browser控件代替这种情况您可以轻松地将元素插入到web- browser作为子元素,使用web浏览器您有很多优势。

你可以建立你的页面和保存HTML页面。这是一个简单的例子,但你可以做更多:

//From.cs
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    Html_Class _Html_Class = new Html_Class();
    private void Add_Element_Click(object sender, EventArgs e)
    {
        HtmlElement userelement = _Html_Class.Create_Tag("p");
        userelement.InnerText = "Something";
        _Html_Class.Addend_Child(userelement);
        var s = _Html_Class.Get_Source();
    }
}
//Html_Class.cs
public class Html_Class
{
    private WebBrowser wb = new WebBrowser();
    public Html_Class()
    {
       wb.DocumentText = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY></BODY></HTML>";
    }
    public HtmlElement Create_Tag(string tagname)
    {
        return  wb.Document.CreateElement("tagname");
    }
    public void Addend_Child(HtmlElement element)
    {
        wb.Document.Body.AppendChild(element);
    }
    public string Get_Source()
    {
     return (wb.Document.DomDocument as mshtml.HTMLDocument).documentElement.outerHTML;
    }
}

为什么不使用WebBrowser控件,而不是像这样调用它:

 htmlLoadWebbrowser1.LoadHTML(@"D:'test.htm");

你可以这样称呼它

 webBrowser1.Navigate(@"D:'test.htm");

我用你自己的代码测试,它工作。

其次,我认为你也错过了一件小事,但我认为它是重要的,也就是说,在你的代码中有:
public string htmlstringfirst = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY>";

你没有忘记添加表单元素的起始标签吗?这样的:

public string htmlstringfirst = "<HTML><HEADER><title>My Web-page</title></HEADER><BODY><form>";

GuidClass的构造函数附加在htmlstring之上。但就目前情况而言,每次创建新的GuidClass时,它都会有自己的htmlstring副本,该副本初始化为空字符串,然后添加到构造函数中。

相反,您需要在调用之间存储以前的值。

使其工作的"最少代码更改"方法将是更改

public string htmlstring = "";

public static string htmlstring = "";

(其中static表示类的所有实例共享同一个变量)。

您还需要将调用它的点从objGuid.htmlstring更改为GuidClass.htmlstring

虽然这将使您在短期内工作,但仍有许多改进可以使代码更整洁,更易于维护。Stack Overflow并不是提供这种类型反馈的地方,但是https://codereview.stackexchange.com/上的热心人士将能够为您指出正确的方向。