|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。控件|语句我比来正在写一个BBS的项目,在显现主题列表时,我碰到了一个成绩。BBS_Topic的数据表布局界说大抵是上面如许:
TABLEBBS_Topic
(
TopicIDINTNOTNULLIDENTITY(1,1)PRIMARYKEY,
TitleNVARCHAR(40),
AuthorNVARCHAR(20),
PostDateDATETIMENOTNULLDEFAULTGETDATE(),
ContentNTEXT,
ClickedINTNOTNULLDEFAULT0,
ReCountINTNOTNULLDEFAULT0,
LastReplyerNVARCHAR(20)
)
上面是ListTopic.aspx文件中的部份内容:
<asp:RepeaterID="_TopicRepeater"Runat="SERVER"DataSource="...">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"Title")%>
<%#DataBinder.Eval(Container.DataItem,"Author")%>
<%#DataBinder.Eval(Container.DataItem,"Clicked")%>
<%#DataBinder.Eval(Container.DataItem,"ReCount")%>
<!--注重上面的if语句-->
<%if((int)(DataBinder.Eval(Container.DataItem,"ReCount"))==0){%>
----
<%}else{%>
<%#DataBinder.Eval(Container.DataItem,"LastReplyer")%>
<%}%>
</ItemTemplate>
</asp:Repeater>
利用if语句的目标是在于:判别以后帖子的复兴次数为0时,就将LastReplyer这项显现成“----”。而以后的帖子的复兴次数不为0时,则显现复兴人的名字。可是,如许的做法是行欠亨的。在IE中会呈现相似的告诫
编译器毛病信息:CS0246:找不到范例或定名空间称号“Container”(是不是短少using指令或程序集援用?)
即使,依据这个毛病提醒,将一切大概用到的定名空间全都Import到这个文件里,也仍是会提醒其他毛病信息的。至于为何如许?多是由于DataBinder.Eval和Container.DataItem同属Repeater类的成员的原因。“<%#%>”就是“感化”在Repeater上,可是“if...else...”语句则分歧,它是“感化”在全部页面上。这就象是在全局过程当中间接会见部分变量。固然,用相似上面(三目运算)的语句也能够完成上述功效:
<%#((int)(DataBinder.Eval(Container.DataItem,"ReCount"))==0)
?"----"
:DataBinder.Eval(Container.DataItem,"LastReplyer")%>
可成绩是,关于庞大的判别处置,如许的做法就相称坚苦了。
而<%#if...else...%>如许的用法又为何也不可呢?由于<%#%>相称于<%=%>,而<%=%>就是Response.Write(),那末后面的判别就显得好笑:
Response.Write(if...else...);
假如非要在Repeater中利用if语句来判别个中的数据,那末能够接纳上面的办法:
<%int_nIndex=0;%><!--界说一个一时的整型变量-->
<asp:RepeaterID="_TopicRepeater"Runat="SERVER"DataSource="...">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"Title")%>
<%#DataBinder.Eval(Container.DataItem,"Author")%>
<%#DataBinder.Eval(Container.DataItem,"Clicked")%>
<%#DataBinder.Eval(Container.DataItem,"ReCount")%>
<%
intnReCount=(int)(((DataView)_TopicRepeater.DataSource).Table.Rows[_nIndex++]["ReCount"]);
//也能够分红几句来写
//DataViewDV=(DataView)_TopicRepeater.DataSource;
//DV.Table.Rows[_nIndex++]["ReCount"];
if(nReCount==0){%>
----
<%}else{%>
<%#DataBinder.Eval(Container.DataItem,"LastReplyer")%>
<%}%>
</ItemTemplate>
</asp:Repeater>
其基础思绪是,失掉_TopicRepeater的数据源(DataSource)
(说明:我在绑定Repeater的数据源时,利用的是DataSet.Tables["..."].DefaultView。假如利用的是其他的数据源,那末在给Repeater.DataSource强迫转型时,要略加注重)
并前往该表(Table)确当前行(Rows[_nIndex++])最初判别ReCount列是不是为0?在最后的时分_nIndex被赋值为0,然后,在每次的ItemTemplate里都自加一次。其目标,也就是让_nIndex纪录以后正在会见的纪录“行”。
关于DataGrid和DataList,这个办法也是可行的。
最初,这个办法在举行庞大判别绑定命据时的确无效,可是我其实不保举如许的做法!由于如许的做法其实不切合面向工具的封装特征,大概说,它是以损坏了封装特征的做法使之通明,来完成判别功效的。我保举的做法是,利用“自界说用户控件”来完成庞大的判断绑定义务。
</p>Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。 |
|