I didn't think it was easy at first, after I finished it.
This is divided into several steps
1. Get page Template html
2. Get Data
3. Parsing templates and data, generating static page HTML code
4. Generating static files
The template form is the MVC pattern, and MVC looks at it.
Mainly 2nd and 3rd steps.
You need to apply the following file
RazorEngine.dll
System.Web.Razor.dll
<summary>
Get HTML code for a page
</summary>
<param name= "url" > template page Path </param>
<param name= "Encoding" > page encoding </param>
<returns></returns>
public string gethtml (string url, System.Text.Encoding Encoding)
{
byte[] buf = new WebClient (). Downloaddata (URL);
if (encoding! = NULL) return encoding. GetString (BUF);
String html = System.Text.Encoding.UTF8.GetString (BUF);
encoding = getencoding (HTML);
if (encoding = = NULL | | encoding = = SYSTEM.TEXT.ENCODING.UTF8) return HTML;
return encoding. GetString (BUF);
}
<summary>
Get the encoding of the page
</summary>
<param name= "html" >html source </param>
<returns></returns>
Public System.Text.Encoding getencoding (string html)
{
String pattern = @ "(? i) \bcharset= (? <charset>[-a-za-z_0-9]+)";
String charset = Regex.match (HTML, pattern). Groups["CharSet"]. Value;
try {return System.Text.Encoding.GetEncoding (charset);}
catch (ArgumentException) {return null;}
}
<summary>
Create a static file
</summary>
<param name= "Result" >html code </param>
<param name= "Createpath" > Build path </param>
<returns></returns>
public bool Createfilehtmlbytemp (string result, string createpath)
{
if (!string. IsNullOrEmpty (Result))
{
if (string. IsNullOrEmpty (Createpath))
//{
Createpath = "/default.html";
//}
string filepath = Createpath. Substring (Createpath. LastIndexOf (@ "\"));
Createpath = Createpath. Substring (0, Createpath. LastIndexOf (@ "\"));
if (! Directory.Exists (Createpath))
//{
Directory.CreateDirectory (Createpath);
//}
Createpath = Createpath + filepath;
Try
{
FileStream FS2 = new FileStream (Createpath, FileMode.Create);
StreamWriter SW = new StreamWriter (FS2, new System.Text.UTF8Encoding (false));//Remove UTF-8 BOM
Sw. Write (result);
Sw. Close ();
FS2. Close ();
FS2. Dispose ();
return true;
}
catch {return false;}
}
return false;
}
Main part
1. Data
var getjosn = new Dataname () {Name = "Here is the article title", ThemeName = "<span style=\" color:red;\ "> here is the article content </span>"};
var entity = new Dataname ();//entity
This part is to note that the entity class
Reflection part
Type Typet = Getjosn.gettype ();
Type Typeen = Entity.gettype ();
system.reflection.propertyinfo[] Propertyinfost = Typet.getproperties ();
foreach (System.Reflection.PropertyInfo propertyinfot in Propertyinfost)
{
System.Reflection.PropertyInfo Propertyinfoen = Typeen.getproperty (propertyinfot.name);
if (Propertyinfoen! = null && propertyinfot.getvalue (GETJOSN, NULL)! = NULL)
{
Propertyinfoen.setvalue (Entity, Propertyinfot.getvalue (getjosn, NULL), NULL);
}
}
HTML page is code
<body style= "color:aqua;font-size:30px;" >
@Model. Name
@Model. ThemeName
</body>
Parse templates generate static page HTML code
result = Razor.parse ("Template Hmtl", Entity);//entity Corpse Data
I can see the main part basically.
ASP. NET template engine uses Razor to generate HTML static pages