ASP.NET网站制作之ASP.NET WebForm页面内容输入体例
我以前很喜欢Serv-U,自从它用Java重写之后我就再也没用过,实在是太慢了,我宁可用IIS搭建FTP,虽然IIS搭建FTP在权限管理上很不灵活。此次我们谈的话题是“WebForm页面上输入内容的体例”。这实际上是一个十分旧的话题了,由于本文的内容乃至能够使用于ASP.NET1.1之上。不外这个话题的合用局限很广,由于即便是今朝最新的ASP.NETMVC框架,它的默许视图引擎仍旧是基于ASP.NETWebForm的(如Page,Control,MasterPage)。乃至说,因为ASP.NETMVC框架的特征,我们会碰到更多在页面上“间接输入”内容的情形。因而,这个话题在ASP.NETMVC使用中大概由为主要。那末就拿ASP.NETMVC举例吧。假设,我们在页面上天生一个PartialView,我们能够这么做:
<%Html.RenderPartial("MyPartialView");%>
但是,在前一篇文章中我们提出了一个新的办法Partial,它前往一个字符串,它能够在页面上如许利用:
<%=Html.Partial("MyPartialView")%>
一个aspx页面会被编译成Page类的一个子类,这个子类的次要“功效”是掩盖了基类的Render办法:
publicclassMyPage:Page
{
protectedoverridevoidRender(HtmlTextWriterwriter)
{
...
}
}
我们平常在aspx页面中编写的大批内容,实在城市酿成操纵writer的代码。比方利用writer.Write办法输入内容,大概把writer交给子控件的Render办法用于天生内容。那末,以上两种页面上的标志分离又是怎样操纵writer的呢?
<%=expression%>
起首是<%=%>标志。<%=%>标志内包括的是一个“表达式”,因而它不克不及以分号开头。表达式外部的数据就会间接写进writer。比方如许的标志:
<%=DateTime.Now%>
在编译事后就成为:
writer.Write(DateTime.Now)
与<%=%>标志分歧,<%%>标志两头实在包括的是“语句”。语句天然能够有多行,天然每行最初必要有分号,这就像我们平常写C#代码那样。不外实践上,语句的功效实在并非为了“输入内容”,而是用来“把持逻辑”。比方,您在页面上写了如许的代码:
<%Func<int,bool>odd=i=>i%2!=0;%>
如许就相称于您在Render办法外部声了然一个部分变量odd,它的范例是一个Func<int,bool>托付。而假如您编写如许的代码:
<%for(inti=0;i<10;i++){%>
<span>
<%=i+1%>
</span>
<%}%>
则天生的Render办法中就会包括:
for(inti=0;i<10;i++)
{
writer.Write("<span>");
writer.Write(i+1);
writer.Write("</span>");
}
假如是写在页面上的一般HTML标志,编译后就被看成一般字符串来处置了。有些伴侣一向谈“客户端控件”等等,实在假如一个元素上没有runat="server"标志,ASP.NET只是把它们看成一般字符串处置,其实不会有任何“HTML元素”的观点。固然,下面的代码体现的是“企图”,现实上在编译事后aspx页面中的空格和换行等字符也会包括在输入的内容中。
那末,既然<%%>中包括的是用来把持逻辑的语句,自己不是用来暗示输入的,那末为何方才代码中的Html.RenderPartial办法也会天生页面内容呢?那是由于RenderPartial办法间接向以后HttpContext.Response.Output里写进字符了。良多伴侣常常利用Response.Write来输入内容,实在在Write办法外部就是输入到Output中。
现实上,即便我们的页面中利用了HtmlTextWriter来输入内容,但它外部也是封装了Output所表露出的TextWriter中。为了考证,您能够在代码中设置断点并察看Render办法的writer参数,在“一般情形下”能够发明writer.InnerWriter属性是一个HttpWriter工具,这是个TextWriter的子类,也是ASP.NET中界说的外部范例。
这即是ASP.NET页面输入的细节。那末叨教,以下两种输入体例的区分是甚么呢?
<%="HelloWorld"%>
<%Response.Write("HelloWorld")%>
从效果上看,二者没有任何区分。可是实践上前者是利用页面的HtmlTextWriter工具输入的,尔后者则间接向Response.Output里输入内容。这个区分看似不主要,但实在它会触及到我们良多开辟过程当中可用的理论体例。在从此的文章中,我会提出身成页面内容的一些原则,注释这些原则的缘故原由,并指出ASP.NETMVC自己是怎样损坏这些计划原则的。
天然,修正版本的ASP.NETMVC会公布在MvcPatch项目中。
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。 逐步缩小出错代码段的范围,最终确定错误代码的位置。 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
页:
[1]