当前位置:编程学习 > C#/ASP.NET >>

大家做过动态载入模板页html前台显示内容的网站吗?

大家帮忙!问题:首页是index.aspx形式的,然后在后台用代码调用文件夹下面的一个静态的模板页比如是index.htm,里面有{%title%},或者函数{%ShowArticleList(x,x,x,x,x,true,false,0,1,1,3,4)%}等等,然后替换出来,利用缓存加载到index.aspx里面显示出来,如果模板也里面有.net控件,还要加载控件内容,程序还要判断,查找控件,内容绑定等等,这些怎么实现?
大家帮帮忙! --------------------编程问答-------------------- 这种情况一般用masterpage来实现,只要指定当前页的masterpage就可以了,其实和模板效果是一样的,只是你不用再管理模板页里的东西,只需要替换其中的部分就可以了 --------------------编程问答-------------------- 如果生成静态呢?masterpage也就行不通了 --------------------编程问答-------------------- 这个是我以前发的
http://community.csdn.net/Expert/topic/4782/4782575.xml?temp=.2596094
现在都还没有解决 --------------------编程问答-------------------- 静态页也可以的,比如你可以通过动态页访问:
http://www.xx.com/show.aspx?id=1001
你可以做一个类专门用来生成静态页,生成时自动访问这个动态地址,获取源代码后另存为你想展现的静态页,在新增、修改内容时调用一下静态化操作
好处还有在更换模板时只需要重新静态化一遍就可以,方便很多 --------------------编程问答-------------------- 帮LZ顶 --------------------编程问答-------------------- 一般来说都是用欠入式的开发思维,就是将ASPX页加到HTML页 --------------------编程问答-------------------- 用ASP.NET 2.0,然后通过ExpressionBuilder实现。

有关ExpressionBuilder,可以参考一下这里:
http://www.cnblogs.com/cathsfz/archive/2006/12/02/580142.html

在ASP.NET 2.0里面,<%$ %>都是通过ExpressionBuilder来解释的,例如<%$ ConnectionStrings: MyConnection %>就是由ConnectionStringsExpressionBuilder负责解释的,类似的还有AppSettingsExpressionBuilder等。你需要做的就是写一个自己的ExpressionBuilder,在它的GetCodeExpression方法中返回你要填充进去的字符串。 --------------------编程问答-------------------- 模板页面index.htm里面的内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1">
    <div>
        wo ai ni a
        <%=title()%></div>
    </form>
</body>
</html>

首页Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>
<%@ OutputCache Duration="180" VaryByParam="None" %>

源文件Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
    {        
        string InForPath = "Templets/index.htm";
        string path = System.Web.HttpContext.Current.Server.MapPath(InForPath);
        StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
        string line="";
        try
        {               
            line = sr.ReadToEnd();
        }
        finally
        {
            sr.Close();
            sr.Dispose();
        }
        if(!Page.IsPostBack)
        {
            Page.Controls.Add(Page.ParseControl(line));
        }      
    }
    public static string title()
    {
        string str = "wo shi ni de baobei";
        return str;
    }


以上简单事例
问题是函数title不能执行,而且不能加入runat="server",否则会出现服务器端隐藏控件
大家看看有什么办法吗? --------------------编程问答-------------------- 模板页面index.htm里面的内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1">
    <div>
        wo ai ni a
        <%=title()%></div>
    </form>
</body>
</html>

首页Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>
<%@ OutputCache Duration="180" VaryByParam="None" %>

源文件Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
    {        
        string InForPath = "Templets/index.htm";
        string path = System.Web.HttpContext.Current.Server.MapPath(InForPath);
        StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
        string line="";
        try
        {               
            line = sr.ReadToEnd();
        }
        finally
        {
            sr.Close();
            sr.Dispose();
        }
        if(!Page.IsPostBack)
        {
            Page.Controls.Add(Page.ParseControl(line));
        }      
    }
    public static string title()
    {
        string str = "wo shi ni de baobei";
        return str;
    }


以上简单事例
问题是函数title不能执行,而且不能加入runat="server",否则会出现服务器端隐藏控件
大家看看有什么办法吗?
  
===================================================================================
支持楼上的 --------------------编程问答-------------------- IIS添加html的.net framework映射

RewriteUrl

页面设缓存

效果差不多 --------------------编程问答-------------------- 如果数据量大的话,服务器会卡死 --------------------编程问答-------------------- 就是循环替换目标数据里的标签 --------------------编程问答-------------------- 大家仔细看一下我的我后来发的问题再回答 --------------------编程问答-------------------- 简单点的方法。用<!-- #include file="" -->引入模板。关于模板里的标签{title}。这些可以另外做一个管理。专门生成静态页index.htm。最后直接include生成的最终index页就可以了。
--------------------编程问答-------------------- g --------------------编程问答-------------------- 问题不全面,用这个<!-- -->形势引入模版,不符合要求,而且发展不好。修改麻烦!!! --------------------编程问答-------------------- 修改麻烦??如果修改只修改模板就可以了。代码根本不需要修改。不知何来麻烦。 --------------------编程问答-------------------- 我现在的想法就是模板存入数据库,然后动态读取数据库表调用模板内容,然后用正则表达式读取标签,然后进行最终结果替换,然后输出。不过这样麻烦了些,不过决定把它生成静态,这样占用的资源就少些。 --------------------编程问答-------------------- 感觉都主 如果希望完全在后台进行模板解析 似乎等仪放弃了.NET的很多优势

首先要在HTML页中替换内容,又要加载一些控件
这和我们目前作的一个东西有点类似(这个项目很BT,所以我也很讨厌它)
我们是把每个元素都实现自己的自解析。
也就是说 把IIS和浏览器作的工作都用代码自己实现,直接输出HTML代码。
再合成为HTML页显示出去。这样可以解决很多控件在后台的预先处理。但是却抛弃了.NET的很多优势。

其实如果访问量不是很大,可以把控件都放到一个站点里,每个元素都有自己一个访问页。
在你的INDEX。ASPX中 把需要替换的你那些标记 转换成URL 用REQUEST去访问那些元素的访问页。把GET出来的HTML替换到INDEX。HTM中的那些标记 --------------------编程问答-------------------- 楼主和我们以前作的那个站点很像啊 --------------------编程问答-------------------- .net的优势确实是抛弃了很多,但是总的来说比asp和php快多了 --------------------编程问答-------------------- 说白了 等于自己设计一个IIS
呵呵 --------------------编程问答-------------------- 我不用任何一个.net控件,而是生成静态页面,不过后台就是.net的了,标签设计用的是自己规定的格式自定义的,用正则表达式检索读取替换。 --------------------编程问答-------------------- 我将要做一个用.net做的blog以及cms出来了,大家可以关注我的blog  http://www.vvkoo.com --------------------编程问答-------------------- 专职接分
--------------------编程问答-------------------- 现在已经做出来一个模型了,现在天天加班做最后工作,希望早点和大家见面
演示网址:www.mlface.com --------------------编程问答-------------------- --------------------编程问答-------------------- 没有将详细点 --------------------编程问答-------------------- 类似的网站是做过,但是没有楼主的那么麻烦,只是用内容替换掉相应的标签,然后生成一个html,内容也都比较简单,就是新闻 --------------------编程问答-------------------- 模板中还要用到控件等。。这样比较麻烦

这样最好的办法。。就是后台控制自动生成一个aspx页

可以参考discuz的模板引擎!
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,