牛腩新闻发布系统视频,这个视频,其实就是一个视频,然后它一步一步的教我们做一个B/S(Browser/Sever,浏览器/服务器)的系统.跟着视频,弄出了系统,大概了解了下B/S系统的开发流程,以及一些比较常用控件的使用,还有学习了一些重要的代码,属性的作用,以及了解了错误的调试和处理,并简单的学习了下CSS(CascadingStyleSheet,级联样式表)的知识,CSS和HTML代码完全分离,可控制网页的样式和布局.
牛腩新闻发布系统的流程就是,首先对整个系统的制作,做了设计,画了用例图,介绍了该系统的主要角色和功能,然后根据系统中的对象的属性,完成数据库的编写,对于字段createTime,使用的是默认值getdate()获取当前时间.然后用flash工具设计了界面,画了系统的页面以及页面上显示的内容;还有设计前后台的界面.
接着就是代码的编写,在VS上新建了一个网站,采用的三层的模式进行编写.从SqlHelper开始编写.简单的编写后,为了验证编写是否可用,直接编写简单的界面进行操作,对结果进行了验证.然后介绍下,后期重构SqlHelper的时候,使用了如下的语句,使用完自动释放using中的对象.
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr); //此处用到sdr对象
} //此处释放sdr对象,并关闭connection对象连接
接着是对实体层的编写,根据数据库的字段,对实体层进行编写,并给每个实体层构造了有参或无参的构造函数.这个编写可用工具生成,我是用了动软直接将数据库的字段进行了实体层代码的生成,不过还是改了一部分.所以有时候觉得,如果数据库小的话,还不如手写快!
接着是对D层代码编写,D层代码很简单和C/S的是一样的.主要就是,在那些个方法中编写Sql语句或者存储过程,然后是设置参数集合,然后执行sqlhelper的某个方法.由于数据库是有设计主外键的,所以删除是件比较麻烦的事情.以前我都是不删除数据,只用一个字段,表示数据是否存在.不过如果数据太多,而且无用,确实有必要删除,使用触发器是不错的,但是据说触发器不好控制,万一一不小心出点问题,连问题出在哪都不知道,因为没法调试;所以我个人还是不喜欢用触发器(其实是不怎么会用),宁可多写几条语句,或者使用事务什么的!创建触发器,SQL Server Management会有模板,很方便.
ALTER TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[category]
instead of DELETE
AS
BEGIN
--select * from news
declare @caId int
select @caId=id from deleted
--删除评论
delete comment where [newsId] in (select id from news where caId=@caId )
--删除新闻
delete news where caId=@caId
--删除类别
delete category where id=@caId
END
还有存储过程,其实和Sql语句差不多.使用了存储过程,以前传Sql语句,现在传存储过程名,其他基本一样.有一点不方便的是,参数集合的设置,以前对着Sql语句写就好了,这个还需要对着存储过程,根据它需要的参数来写.如果忘了存储过程需要的参数,还需要打开数据库进行参看.
然后就是对B层进行编写,牛腩将B层架空了,全是return,有跟没有一样,这点不行,做的不好.
这样前期的准备工作就完成,接下来的就是Web界面的开发了.对于界面样式的设计,需要使用CSS.CSS是一种样式设计语言,它的特点是能够真正做到网页表现与内容分离.可以对网页中的对象的位置排版进行非常精确的控制,而且几乎支持所有的字体字号样式,而且易读性还好。
CSS的比较常用的是,几种选择器.根据优先级排,ID选择器>类选择器>HTML标签选择器.对于id,前面加"#",对于类,前面加".";对于属性,前面啥也不加.
举个例子,比如
在HTML代码中是这样的,需要给这句话,设置样式:字体为红色,大小为16px;
<p id="setcolor" class="setfont">
这个段落是红色,字体是16px大小的。
</p>
那么,CSS文本中就可以这么写:
body
{
color:black; /* 默认字体颜色为黑色 */
font:14px; /* 默认字体大小为14px */
}
#setcolor
{
color:red; /* 修改字体颜色为红色 */
}
.setfont
{
color:blue;
font:16px; /* 修改字体大小为16px */
}
由于优先级的原因,字体的颜色为红色,16px;
然后CSS的核心内容是:标准流,盒子模型,浮动,定位.这个我也说不大清楚,就不说了!对于标准流,我就知道float(浮动)会脱离标准流;盒子模型,就知道外边距(margin,),内边距(padding),宽(width),高(height).图是这个样子的
Web页面设计的框架完成之后,就需要和数据库联系起来,获取正确的数据.而不是自己写好的固定的数据;数据是在表格中显示的,也就是table中的tr;拉出工具箱中的数据下的Repeater或者GridView.然后如果是在这个Repeater控件的下,则编写代码;<ItemTemplate></ItemTemplate>;
HTML代码如下:
页面代码如下:
如果是GridView,则HTML代码如下,里面的代码可以不用手写,在设计界面上编辑列,去掉自动生成字段,BoundField,添加,修改属性;
然后,出来的代码就是这个样子,不需要手动输入代码!
页面代码如下:
部分技巧/知识介绍,木有先后顺序,先想到先写:
1.//TODO,定义未完成的位置,方便在大系统中,查找自己还未完成的代码,继续进行编写.使用视图--任务列表查看;
2.VS2010,Ctrl+E+D,整理代码;
3.常用代码,拖到工具箱中,变成自定义代码;
4.display:block;建立块;
5.<a href=""></a>链接标签里的属性,target="_blank",表示在新的页面打开链接;
6.特殊字符的输入,实体引用©,表示版权符号;&,表示&(和号);
7.页面的调试工具,火狐的叫firebug,安装了就能用了.其他浏览器,按F12好像都有!
8.制作母版页,新建一个母版页项,写代码;然后创建新的Web窗体项,选择母版页,即可,新创建的页面和母版页的界面是一样的;母版还可以嵌套母版;
9.圆角框,保存带圆角框的网页;删除圆角框的内容,只保留圆角框.截图,保存;使用photoshop,裁图;需要头部,中间一条线,和尾部;或者左上(一大片),左下,右上,右下,中间1条线;设置好background-image:url(""),background-position:bottom/center/top/right等等,background-repeat:no-repeat/repeat-y/repeat-x.
10.页面倒计时的制作:使用script的setInterval作为计时器,clearInterval()防止倒计时到0了还继续走,window.location.href="",跳转页面;document.getElemnetById("mes").innerHTML=i;则id为mes的值会在页面上变化,跟i一样,从5到0,倒计时;
这个是mes:
11. .NET截取指定长度汉字超出部分以"..."代替: http://blog.csdn.net/xiaoduishenghuogo/article/details/7647511
12.
,~当前的根目录;
13.编码和解码:Server.UrlEncode(),Server.UrlDecode();
14.Request.QueryString[""];
15.删除.以删除用户评论为例.使用LinkButton,HTML编写类似如下代码:
<asp:LinkButton ID="lbtnDelComment" OnClientClick="return confirm('是否真的删除该评论?')" OnClick="lbtnDelComment_Click" CommandArgument='<%# Eval("id") %>' runat="server" Visible="false">删除</asp:LinkButton>
界面代码如下所示:
//删除按钮
protected void lbtnDelComment_Click(object sender, EventArgs e)
{
//当前点击的按钮
LinkButton lb = (LinkButton)sender;
//获取传过来的CommonId
string comId = lb.CommandArgument;
//删除该评论
bool b=new CommentManager().Delete(comId);
if (b)
{
//如果删除成功
//重新绑定新闻
string newsid = Request.QueryString["newsid"];
DataTable dt = new CommentManager().SelectByNewsId(newsid);
if (dt.Rows.Count == 0)
{
//无新闻评论
emptydata.Visible = true;
repComment.DataSource = dt;
repComment.DataBind();
}
else
{
//有新闻评论
emptydata.Visible = false;
repComment.DataSource = dt;
repComment.DataBind();
}
}
else
{
//如果删除失败
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('删除评论失败,请联系管理员!');</script>");
}
}
16.验证码生成, http://niunan.iteye.com/blog/252335.
17.弹出提示:控件RequireFieldValidator 和ValidationSummary,配合使用!注意ValidationGroup属性和ControlToValidate属性;Validator(验证程序,验证器)
18.使用Jquery,注意使用手册!可以实现点击页面,文字变文本,直接修改的功能;和CSS的使用很像!
$
19.FreeTextBox,在线编辑器!更改语言language.xml,中文zh-CN;ValidateRequest="false"
20.错误页,web.xml中<customErrors mode="On" Moderedirect="URL"></customErrors>
21.发布出了点问题,路径的问题.1.IISManager,先新建网站,建完之后,在网站上右击添加虚拟目录.不过要先修改要用的应用程序池的版本为对应版本;2.添加虚拟目录,目录名为web(根路径,因为根路径名叫这个).3.将虚拟目录转为应用程序;右击web,点击浏览,没问题!
22.分页.控件:AspNetPager, http://www.webdiyer.com/ 在线演示: http://www.webdiyer.com/AspNetPagerDemo/default.aspx 应用自定义样式 http://www.webdiyer.com/AspNetPagerDemo/ApplyStyles/default.aspx
数据库:分页,用到了ROW_NUMBER(). http://niunan.iteye.com/blog/264197 http://blog.sina.com.cn/s/blog_931b09030101c2e8.html
GridView:AllowPaging改为True,在GridView1_PageIndexChanging事件中,GridView1.PageIndex=e.NewPageIndex;然后绑定数据;
23.注释不用#region折叠,而是将注释从summary中拖出来,拖到第一个<summary>的后面,这样折叠的时候,就能又看到返回值又可以看到注释;
/// <summary>取出最新10条新闻(所属分类,新闻标题,发布时间)
/// 取出最新10条新闻(所属分类,新闻标题,发布时间)
/// </summary>
24.AJAX,工具箱-->AJAX Extensions-->UpdatePanel,可以做到不用提交整个页面,只提交需要提交的部分!
25.重新生成解决方法!
26.MaintainScrollPositionOnPostback="true" 在页面最上面设置,提交表单后保持滚动条的位置不变!但好像不是所有浏览器都有用!Postback,PRADO编程术语,一个form的提交称之为postback!
27.由于有些页面需要参数,所以直接浏览的时候,会出问题;那么作为参数caid,先判断是否为空或者是否不能转换为数字(caid是类别ID,所以是int类型),只要有一个成立,则跳转到一个默认页面(首页)!
if (string.IsNullOrEmpty(caid) || !int.TryParse(caid,out x))
{
Response.Redirect("default.aspx");
}
以上:应该差不多将牛腩中的知识都有囊括!这个博客,其实主要是给我自己看的,是为了以后,我看完这篇文章,就能很快的了解牛腩中的知识.或者以后遇到问题,看看能否从中找到解决方法!或者看到某点,想到某些!有些记流水账的样子,个人感觉,前面写的还好,到后面,写着写着就觉得太多了,不像总结,像在罗列,所以,后面就罗列到底了~