如何动态生成后台的aspx页面
如题。高手们请注意,是动态生成后台的aspx页面而不是生成静态的html页面。也许,很多人很奇怪,aspx不是“动态”的页面么,为何还要“动态”生成“动态”的aspx页面呢?这是跟需求有关的。一般说来,一个动态的aspx页面能够处理一种业务逻辑的东西,而我要达到的目的是用户能够根据需要定制生成能够处理不同业务逻辑的业务,实现“基于Asp.net的表单设计器”的效果。
要动态生成aspx页面,或者说由用户来定制生成aspx页面,那么必须提供“基于Asp.net的表单设计器”,即实现基于控件的定制。网络中,动态生成控件的例子可谓不少,但是很显然不满足我的要求。因为,这种生成的动态控件是在内存中存在的,运行后能在aspx中看到的实际上已经变成了html客户端脚本,这生成的很显然就不是后台的aspx页面。
在关于实现表单设计器方面,基于工作流的表单设计器已经有了,基于表单的设计器也有少量,例如“http://www.shareidea.net/support.htm”已经有就是一例。那么基于此思路,请大家多来交流啦。 --------------------编程问答-------------------- 你可以动态生成ascx,然后aspx按需调用不同的ascx就行了。Page对象的LoadControl方法本来就会动态编译ascx(如果需要编译的话)并加载到当前的Page里边作为内容。
我给你写个简单例子。首先创建一个aspx后缀的文件,包含如下内容(注意没有什么<html><body><form>之类的):
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
var tar = Server.MapPath("~/MyPage.ascx");
if (!System.IO.File.Exists(tar))
System.IO.File.Copy(Server.MapPath("~/MyPage.txt"), tar);
var uc = this.LoadControl("~/MyPage.ascx");
this.Controls.Add(uc);
}
</script>
然后创建一个文本文件MyPage.txt,内容是:
<%@ Control Language="C#" ClassName="MyPage" %>然后可以运行!你可以看到,一个txt文件就可以被动态执行!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
Calendar1.BackColor = System.Drawing.Color.LightBlue;
}
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
if (e.Day.Date == DateTime.Now.Date)
{
e.Cell.Controls.Clear();
var img = new Image { ImageUrl = "http://avatar.profile.csdn.net/1/8/D/2_sp1234.jpg", AlternateText="今日" };
e.Cell.Controls.Add(img);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Calendar ID="Calendar1" runat="server" ondayrender="Calendar1_DayRender"></asp:Calendar>
aslkdfka dsfasdfasdf<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body>
</html>
asp.net是非常伟大的技术,可惜现在大多数号称“会asp.net编程”的人许多都只知道它的5%就出去找工作去了。要说asp.net它垃圾,就是它不跟上ajax的潮流去把原有的机制直接编译为轻量级插件,而是把精力去整什么“模式”去了,这只能让我在4年前不得不“放弃”我曾经看好好几年的asp.net。 --------------------编程问答-------------------- 你可以看到,例如LoadTemplate方法还可以动态加载ascx成为任意控件的模版(注意模版跟子控件的区别),于是你就可以一边编辑这个文本文件、一边就把编辑成果实时地作为GridView、Repeater、ListView等的模版。
asp.net这些东西都是2002年就正式发布出来的,也就是说至少11、12年前就已经付诸实施(只不过是在.net测试版的发布而已)。
我只能说,asp.net是门遗憾的工具。 --------------------编程问答-------------------- 用Razor引擎挺好的。 作模板生成合适,开发量不是很大。
http://razorengine.codeplex.com/
string template = @"<%@ Control Language="C#" ClassName="@Model.Name" %>";
string result = Razor.Parse(template, new { Name = "Classname" });
还有一个选择是
Text Template Transformation
都是微软的东西。
还有很多开源的方案, 仔细找找。
--------------------编程问答-------------------- 方向有误,这里没啥前台,也没啥后台
如果你要做这个首先要做“中间台”,你必须现有一个中间性质的描述标准(或数据结构)
你的困惑也就是这个,前面是html,后面是逻辑。 很明显如果你没有一个处于中间不变的描述,那么你的后端就可能达到你要求的以一当百的逻辑应对
我们看大厂的成品,IBM的Xfrom 他有自己的一个中间描述标准,再看微软的infopath,他一样是先用xsd架构指明数据结构,然后是xml数据存储,前端是xsl界面解析。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 这个估计很麻烦,把把ASPX当成文件来处理,选择不同,再把用户控件写入文件中,然后保存吧, --------------------编程问答-------------------- 就是要直接写个文本文件么? --------------------编程问答--------------------
您在1#的方法其实我早就知道了。但是,我要自动生成页面的目的是提供给用户使用,让用户可以来定义自己的业务逻辑,从而摆脱项目实施需要专业人员参与的目的。所以,这种粗颗粒度的方法肯定是不行的。反过来说,我之所以说要生成前台的html和后台的.cs文件,主要是考虑到能把这个自动追加到.csproj文件中去,从而使这些动态生成的代码与解决方案一致。其实,微软的codeDom就提供了解决方案,只是不实用。
至于您说的asp.net是遗憾的工具,我不这样认为。正如您所言,您认为很多人只学到5%就去找工作了,这恰恰说明的asp.net的博大精神。几年前,我为asp.net的权限控制很挠头;两年前,我分析过membership,觉得它在移植和复用上还是不实用。后来,我又分析了其CustomPrincipal与CustomIdentity,觉得其实微软什么都给我们提供了。我们完全可以借用这些与Httpmodule把常规的业务需求玩弄于股掌之中,甚至可以设计成比MVC更高效的路由。只可惜,在国内一个帖子可以被转载几万遍,有创新的却没有几个,甚至根本没有。
相比java技术,我觉得asp.net简单易上手,功能上不比java差。我预计几年后用此技术的人甚至会超过java,这就像当年的VB一样。 --------------------编程问答--------------------
您说的这个,第一个我多少了解一点,后一个我再看看。十分感谢。
不知您有没有类似的方案,方便的话给我发点啦。平时工作太忙,也不能上internet网,没有时间去搞啦。
再说了,我现在搞这个是靠兴趣,兴许工作跟这个都没有多大关系了。 --------------------编程问答--------------------
您说的很对。要做这个,中间描述是一定要有的。我可以给大家推荐一下勤哲“Excel服务器”,大家可以去分析一下它的后台。 --------------------编程问答-------------------- 好多高手额。。
--------------------编程问答-------------------- 最近没有关注自己的帖子了,希望能引来高人啊 --------------------编程问答-------------------- --------------------编程问答--------------------
不错不错,谢谢分享,学习了 --------------------编程问答-------------------- aspx文件和.cs文件分离:http://blog.csdn.net/joyhen/article/details/8294144,楼主看看能否有一些帮助 --------------------编程问答-------------------- 楼主你好,我现在也在研究asp.net来实现自定义表单,请问有找到一些思路吗?我觉得生成aspx和cs不难,动态编译也不难,难在要有一个好用的设计器可以让用户来实现表单的自定义,像vs中设计aspx页面那样。 --------------------编程问答-------------------- 想要摆脱开发人员是不可能的,除非自己学会开发。
这个思路倒是挺好,可惜复杂的还是得靠开发人员
补充:.NET技术 , ASP.NET