ASP.NET 控件详解

来源:互联网 发布:攻城掠地神兵升级数据 编辑:程序博客网 时间:2024/06/06 07:33

[原]IFrame的用法


IFrame介绍:


<iframe>也应该是框架的一种形式,iframe和frame比较相似,但是有一个根本的区别,iframe可以活动,而frame是不可活动的。换句话说,iframe可以指定其坐标位置。

大部分的时候我们用iframe去模拟一些特效。例如我现在要求当前页面执行某个操作,而操作后肯定要有一个跳转的动作。但是一旦跳转,原始页面就没了,这个时候可以让iframe内部做跳转,这样页面不动,而执行的内容也完成了。如果iframe的尺寸是个0*0的,就可以模拟ajax的效果了。

 

Frame简单介绍:


在JAVA中,frame是一种控件,可作为父窗体加载其他swing控件。

在VB中,Frame是一种控件。Frame 控件为控件提供可标识的分组。Frame 可以在功能上进一步分割一个窗体-例如,把 OptionButton 控件分成几组。

 

,Iframe标记的使用格式是:

 

代码如下:


<Iframe src="URL" width="x" height="x" scrolling="[OPTION]" frameborder="x"></iframe>

src:文件的路径,既可是HTML文件,也可以是文本、ASP等; 

width、height:"画中画"区域的宽与高; 

scrolling:当SRC的指定的HTML文件在指定的区域不显不完时,滚动选项,如果设置为NO,则不出现滚动条;如为Auto:则自动出现滚动条;如为Yes,则显示; 

FrameBorder:区域边框的宽度,为了让“画中画“与邻近的内容相融合,常设置为0。 

 

例如:

代码如下:


<Iframe src="http://www.jb51.net";; width="250" height="200" scrolling="no" frameborder="0"></iframe> 

二、父窗体与子窗体之间的相互控制


在脚本语言与对象层次中,包含Iframe的窗口我们称之为父窗体,另一个为子窗体,弄清这两者的关系很重要,因为要在父窗体中访问子窗体或相反都必须清楚对象层次,才能通过程序来访问并控制窗体。


1、在父窗体中访问并控制子窗体中的对象

在父窗体中,Iframe即子窗体是document对象的一个子对象,可以直接在脚本中访问子窗体中的对象。

 

代码如下:


<Iframe src="test.htm" id="test" width="250" height="200" scrolling="no" frameborder="0"></iframe> test.htm文件代码为: <html> <body> <h1 id="myH1">hello,my boy</h1> </body> </html> 


如我们要改变ID号为myH1的H1标记里的文字为hello,my dear,则可用: 
document.myH1.innerText="hello,my dear"(其中,document可省) 


document.myH1.innerText="hello,my dear"



另一种使用方式:


 <iframe id="myframe" width="100%" class="hide" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto"  src="StuRecords.aspx" style="display: inline; height: 450px;" runat="server">                        </iframe>


当加载父窗体时,默认同时加载子窗体(此时子窗体为空),但是当触发父窗体的某个事件时,要激发子窗体的事件,显示内容


   /// <summary>        /// 显示某道试题的答题记录,显示某一部分。        /// </summary>        /// <param name="dtOneQuestionRecords">查询出20条答题记录</param>        /// <param name="pageIndex">为0</param>        private void ShowAnswerRecord(DataTable dtOneQuestionRecords, string tableRecord, int pageIndex)        {            myframe.Attributes["src"] = "StuRecords.aspx";        }        /// <summary>        /// 下一批        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void btnNextPage_Click(object sender, EventArgs e)        {            myframe.Attributes["src"] = "StuRecords.aspx";         }

子窗体的判断


/// <summary>/// 窗体加载时,判断session的值是否为空,空则加载子窗体空白页,否则执行子窗体的事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>       protected void Page_Load(object sender, EventArgs e)        {            if (Session["questionType"] != null)            {                ShowStuRecord();            }            else {             }        }        public void ShowStuRecord() {            //得到试题id            int questionIndex = Convert.ToInt32(Session["questionIndex"]);            //获取考试id值            //string ExamID = DropExam.SelectedItem.Value;            string ExamID = "1306172117";            //查找试题记录--答题记录表            string tableRecord = Convert.ToString(Session["tableRecord"]);            //题型的value            //string UserName = Session["UserName"].ToString();            string UserName = "xvshu";            string questionType = Session["questionType"].ToString();            //调用王永俊的方法,查看答题记录前20条,并写入教师姓名            Hashtable map = new Hashtable();            map.Add("TableNameRecord", tableRecord);//题型value和表名            map.Add("QuestionType", questionType);            map.Add("Teacher", UserName);            map.Add("QuestionID", questionIndex);            map.Add("ExamID", ExamID);            QuestionContextBLL awardingBLL = new QuestionContextBLL(map);            //查出答题记录            DataTable dtOneQuestionRecords = awardingBLL.SelectRecordTopbyQuestionID(map);            if (dtOneQuestionRecords.Rows.Count == 0)            {                MessageBox.Show(this, "已判完!");            }            lblFraction.Text = "标准分数:" + Session["Fraction"];            int pageIndex = 0;            for (int i = 30 * pageIndex; i < 30 * pageIndex + 30 && i < dtOneQuestionRecords.Rows.Count; i++)            {                //显示答写的试题答案                TableCell tc = new TableCell();                tc.Text = (i + 1).ToString() + "答案:" + dtOneQuestionRecords.Rows[i]["ExamAnswer"].ToString();                TableRow tr = new TableRow();                tr.Cells.Add(tc);                tblAutoTable.Rows.Add(tr);                TextBox textBox = new TextBox();                //得到试题记录的id号                string id = dtOneQuestionRecords.Rows[i]["ID"].ToString();                textBox.Text = dtOneQuestionRecords.Rows[i]["Fraction"].ToString();                //给评分控件设置id号                textBox.ID = tableRecord.Trim() + dtOneQuestionRecords.Rows[i]["ID"].ToString();                textBox.Attributes.Add("Onblur", "javascript:return CheckFraction(event.srcElement)&&JudgeQuestions('" + tableRecord.Trim() + "','" + id + "','" + textBox.ID + "')");                //textBox.Attributes.Add("Onblur", "javascript:test()");                TableCell tc1 = new TableCell();                tc1.Controls.Add(textBox);                TableRow tr1 = new TableRow();                tr1.Cells.Add(tc1);                tblAutoTable.Rows.Add(tr1);                //Session["txtScores"] = textBox.ID;            }        }

 在这里的应用主要是根据id值来加载子页面!当然我们也可以根据id值来对它进行不同的操作。

 

2、在子窗体中访问并控制父窗体中对象


在子窗体中我们可以通过其parent即父(双亲)对象来访问父窗口中的对象。

 

复制代码代码如下:


<html> <body onclick="alert(tt.myH1.innerHTML)"> <Iframe name="tt" src="frame1.htm" width="250" height="200" scrolling="no" frameborder="0"></iframe> <h1 id="myH2">hello,my wife</h1> </body> </html> 

如果要在myframe操作我们可以这样写:

parent.myframe.innerText="hello,myfriend"

这里parent对象就代表当前窗体(example.htm所在窗体),要在子窗体中访问父窗体中的对象,无一例外都通过parent对象来进行。

 

 

总结:通过Iframe标记,我们可将那些不变的内容以Iframe来表示,这样,不必重复写相同的内容(框架),这有点象程序设计中的过程或函数,减省了多少繁琐的手工劳动!另外,至关重要的是,它使页面的修改更为可行,因为,不必因为版式的调整而修改每个页面,你只需修改一个父窗体的版式即可了。

 



作者:hejingyuan6 发表于2013-11-27 21:24:39 原文链接
阅读:216 评论:25 查看评论
 [原]DropDownList控件的使用


关于下拉菜单(dropdownlist)一些用法

 

DropDownListWeb控件创建一个包含多个选项的下拉列表,用户可以从中选择一个选项。

 

1,动态绑定数据(datatable绑定)


 #region 绑定设置dropdownlist的值        /// <summary>        /// 绑定设置dropdownlist的值        /// </summary>        /// <param name="ddl"></param>        /// <param name="dt"></param>        private void SetDropDownList(DropDownList ddl, DataTable dt)        {            //清空原有数据            ddl.Items.Clear();            //判断是否有需要填充的数据,有则填充            if (dt.Rows.Count > 0)            {                ddl.DataSource = dt;//绑定数据源                ddl.DataValueField = dt.Columns[0].ToString();//绑定数据项Value                ddl.DataTextField = dt.Columns[2].ToString();//绑定数据项Text                ddl.DataBind();//绑定            }            ddl.Items.Add(new ListItem("请选择", ""));//填充请【选择项】            ddl.SelectedIndex = ddl.Items.Count - 1;//选中【请选择】项        } #endregion


若要指定绑定后的数据选定项可使用

DropDownList.Items.FindByText("name").Selected=true或者

DropDownList.Items.FindByValue("code").Selected=true


另外也可从数据库中获得选定项(比如修改信息的时候)

可使用先用数据库填充一个DateSet--ds,然后使用DropDownList.Items.FindByValue/*或者FindByText*/(ds.Tables[0].Rows[0].ItemArray[0].ToString()).Selected=true;

 

实际应用:

1,从查询页面中点击编辑跳转到编辑页面

2,编辑完成,提示修改成功后,跳转到查询页面的跳转的状态

 

查询页面:


        /// <summary>        /// 点击编辑,获取编辑的id, 即须知id        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void lbtnEdit_Click(object sender, EventArgs e)        {            LinkButton editbtn = (LinkButton)sender;            string ExamID = DropExam.SelectedItem.Value;            //获取被编辑字典的ID            string NoticeID = editbtn.CommandArgument.ToString();            Response.Redirect("ExamNotice.aspx?NoticeID=" + NoticeID + "&ExamID=" + ExamID);            //"ModifyExamStudentInformation.aspx?StudentNo=" + parmStr[0] + "&ExamMainID=" + parmStr[1]        }


修改页面:

                /// <summary>        /// 点击修改        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void btnOK_Click(object sender, EventArgs e)        {            try            {                TeaExamInformationBLL teaExamInformationBLL = new TeaExamInformationBLL();                //定义一个考试申请实体类                string NoticeID = Request.QueryString["NoticeID"];                string ExamID = Request.QueryString["ExamID"];                ExamNoticeEntity enExamNotice = new ExamNoticeEntity();                enExamNotice.NoticeID = NoticeID;                enExamNotice.Notice = txtContent.Text;                enExamNotice.IsNoUse = IsUse.SelectedItem.Text;                enExamNotice.NoticeName = txtNoticeName.Text;                //enExamNotice.AddUser = "何静媛";                enExamNotice.AddUser = Session["UserName"].ToString();                //enExamNotice.IsNoDefault = IsDefault.SelectedItem.Text;                //声明错误枚举                ConfirmInfo flagUpdateExamNotice;                //判断如果想要设置默认须知                flagUpdateExamNotice = teaExamInformationBLL.UpdateExamInformation(enExamNotice);                if (ConfirmInfo.Success == flagUpdateExamNotice)                {                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('修改考试须知信息成功!');</script>");                    //修改成功                    //Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "location.href='SearchInformation.aspx?ExamID='" + ExamID, true);                    Response.Redirect("SearchInformation.aspx");                }                //代码已经存在                else if (ConfirmInfo.Exists == flagUpdateExamNotice)                {                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('修改为默认须知失败!');</script>");                }                else                {                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('修改考试须知信息失败!');</script>");                }            }            catch (Exception ex)            {                MessageBox.Show(this.Page, ex.Message);            }        }


点击修改,修改成功后,跳转回查询页面:

 protected void Page_Load(object sender, EventArgs e)        {            if (Session["UserNO"] != null)            {                              if (!IsPostBack)                {                    //页面首次加载时给表格绑定数据                    BindAllCollege();                    //判断学院的下拉框是否为空,即判断session中的学院是否为空                    if (Session["SelectedCollegeID"] == null)                    {                        BindAllCollege();                    }                                          else                    {                        //如果学院的session中不为空,则将下拉框加载上数据,并附上选中项                        BindAllCollege();                        //先清空选中项                        DropDep.ClearSelection();                        //给下拉框赋上选中项                        DropDep.Items.FindByValue(Session["SelectedCollegeID"].ToString()).Selected = true;                        //DropExamRoom.Items.FindByText(ExamRoom).Selected = true;                        BindCourseByID();                        DropCourse.ClearSelection();                        DropCourse.Items.FindByValue(Session["SelectedCourseID"].ToString()).Selected = true;                        BindExamByCourseID();                        DropExam.ClearSelection();                        DropExam.Items.FindByValue(Session["SelectedExamID"].ToString()).Selected = true;                        //定义B层类                        TeaExamInformationBLL teaExamInformationBLL = new TeaExamInformationBLL();                        //定义一个考试须知实体类                        TR_ExamNoticeEntity enExamNoticeRelative = new TR_ExamNoticeEntity();                        enExamNoticeRelative.ExamID = DropExam.SelectedItem.Value;                        enExamNoticeRelative.AddUser = Session["UserName"].ToString();                        //enExamNoticeRelative.AddUser = "何静媛";                        DataTable dtExamNotice = teaExamInformationBLL.QueryExamInformation(enExamNoticeRelative);                        if (dtExamNotice.Rows.Count == 0)                        {                            //MessageBox.Show(this, "此考试下还未添加考试须知!系统默认应用默认须知");                            lblMessage.Text = "此考试下还未添加考试须知!系统默认应用默认须知";                        }                        repExamNotic.DataSource = dtExamNotice;                        repExamNotic.DataBind();                    }                }            }            else            {                Response.Redirect("../../Student/StuLogin.aspx");            }                        }


2.查询用法


对于单个下拉菜单查询我一般直接使用SelectedIndexChanged事件,使用这个事件千万别忘记把下拉菜单的AutoPostBack属性设为true! 


        /// <summary>        /// 学院变化时加载课程        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void dropCollege_SelectedIndexChanged(object sender, EventArgs e)        {            //绑定课程            BindCourseByID();        } #region 绑定学院        /// <summary>        /// 绑定学院        /// </summary>        private void BindAllCollege()        {            DataTable dtCollege = new DataTable();            BasicSystemBLL BasicSystemBll = new BasicSystemBLL();            dtCollege = BasicSystemBll.GetAllCollege();            //判断是否有学院            if (dtCollege.Rows.Count == 0)            {                MessageBox.Show(this, "没有学院,请联系管理员!");                DropDep.Items.Clear();                //dropDepartment.Items.Clear();                DropCourse.Items.Clear();                DropExam.Items.Clear();                //DropExamRoom.Items.Clear();            }            else            {                SetDropDownList(DropDep, dtCollege);                DropExam.Items.Clear();                //DropExamRoom.Items.Clear();            }        } #endregion

3,添加用法

 

添加DorpDownList控件的Item子项的三种方法

 

 

DropDownList控件的SelectedItem对象表示在执行过程中被选中的Item

Item项拥有三个属性。其一为Text,其二为Value它们分别表示Item项所显示的文字与所表示的值,如果Value属性没有设置,则默认Value属性值等Text属性,第三个属性Selected则用于判断某Item项是否被选中添加DorpDownList控件的Item子项。

 

 

添加DorpDownList控件的Item子项的方法有三种:

 

 

第一种:使用<asp:ListItem>方法

 

<asp:DropDownList id="weste" runat="server">          <asp:ListItem Value="0">小学</asp:ListItem>          <asp:ListItem Value="1">中学</asp:ListItem>          <asp:ListItem Value="2">大学</asp:ListItem></asp:DropDownList>

第二种:使用Items属性的Add方法1

 

DropDownList.Items.Add(ItemText)

 

Items属性表示DropDownList控件所有Item项的集合,Add操作既是在这个集合中插入新的Item项。第二种方法用于只设定Item项的Text属性(实际上也指定了Value属性,此时Value属性值等于Text属性值)。

 

第三种:使用Items属性的Add方法2

 

DropDownListItems.Add(newListItem(ItemText,ItemValue))

 

第三种方法同时设定了Item项的Text属性与Value属性,它是通过添加一个ListItem类来实现的。ListItem类使用了两个参数,第一个参数表示Text属性值,第二个参数表示Value属性值。



DropDownList要加载之后要按照我们查到的数据显示,这只是一种方式,可能还会有更好的方法,在这里只是提供一种方式,也多方面了解一下DropDownList的用法!

 



作者:hejingyuan6 发表于2013-11-20 17:36:41 原文链接
阅读:274 评论:26 查看评论
 [原]隐藏控件--HiddenField控件

     HiddenField控件百度查的结果(帮助大家对比理解):


      HiddenField控件顾名思义就是隐藏输入框的服务器控件它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据。也许这个时候应该有这么一个疑问,为什么有了ViewStateSessionCookie等状态保存机制,还需要用起HiddenField呢?

 

  增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全面因为不管是ViewStateCookie还是Session,都有其失效的时候,比如用户因某种需求要求设置ViewStatefalse,或者环境条件限制使用Cookie,或者用户长时间没有动作导致Session过期等等,那这个时候HiddenField无疑是最佳选择。

 

    HiddenField控件的作用简单的说是用于存储需要在向服务器的发送间保持的值。它作为input type="hidden"/元素呈现,并且通过添加runat=”server”就可以使它成为标准的HTML服务器控件。下面列出的是ASP.NET HiddenField Web服务器控件可以使用的属性和事件。

 

    因为 HiddenField的值将呈现给客户端浏览器,所以它不适用于存储安全敏感的值。若要为 HiddenField控件指定值,请使用 Value 属性,请注意是Value而不是Text。事实上HiddenField并没有Text属性,这和DropDownListCheckBoxList等标准按钮的属性命名方式一致。在标准的属性命名方式中,Text的值是呈现给用户看到的,而Value的值则是通长是通过代码进行控制的。例如你可以让DropDownListText属性显示用户名而让它的Value存储用户的编号。


    当然它的作用还不只这些,下面是做系统时的应用!


    在项目中的应用:


    大家先来看看代码:


web端:


<asp:Repeater ID="repStudent" runat="server">         <ItemTemplate>              <tr>                 <td align="center" >                                                                       <td align="center" > <asp:CheckBox ID="chkStu" runat="server" />                 <asp:HiddenField ID="hidKey2" runat="server" Value='<%# Eval("StudentCode")+","+Eval("ExecutiveClassName")+","+Eval("StudentName")+","+Eval("CollegeName")+","+Eval("DepartmentName")+","+Eval("CollegeName") %>' /></td>                 </td>                 <td class="txt c"><%#Eval("StudentCode") %></td>                  <td class="txt c"><%#Eval("StudentName") %></td>                                                               </tr>       </ItemTemplate> </asp:Repeater>


后台的获取:


  //repStudent绑定的是从数据库中查出的datatable值  //遍历所有的复选框,如果被选中则对应的授课关系将被删除            foreach (RepeaterItem ri in repStudent.Items)            {                cb = ri.FindControl("chkStu") as CheckBox;                if (cb.Checked == true)                {                    hidKey = ri.FindControl("hidKey2") as HiddenField;                    string strKey = hidKey.Value;                    string[] keyList = strKey.Split(',');                    string StudentNo = keyList[0];                    string ExecutiveClassName = keyList[1];                    string StudentName = keyList[2];                    string CollegeName = keyList[3];                    string GradeName = keyList[4];                    //string DepartmentName= keyList[5];                    //新建实体类对象                    //Model.StudentInfoEntity enStudent = new StudentInfoEntity();                   dtStu.Rows.Add(StudentNo,StudentName,CollegeName,ExecutiveClassName,GradeName,examID,examRoom);                }            }


    为什么要这样使用呢?为什么要用HiddenField控件呢(当然可能有更好的办法)?


原因:首先,我需要从数据库中查出数据,有很多字段,但是在界面只需要显示其中的两三个,但问题是,我需要将

其他不显示的字段更新到其他表中,如果我直接绑定显示的值,那么其他字段值就找不到了,还需要去查,可能更麻烦,但是应用HiddenField控件,我可以在web层绑定所有我需要的不显示滴字段,然后到后台获取到HiddenField控件绑定的值,将这些值赋给实体,去更新其他数据库表。


当然这也不一定是最好的解决办法,而且HiddenField控件的功能也不仅如此,这些还需要我们在实践过程中不断应用,不断实践,在这里只是给大家提供一种方式,也是记录一下自己对HiddenField的认识。


如果对于我上面提到的问题,大家有更好的解决办法,希望大家提宝贵意见!共同学习!





作者:hejingyuan6 发表于2013-11-13 23:09:27 原文链接
阅读:373 评论:35 查看评论
 [原]面向对象的方式解决CS1502


错误问题:

 

同一个页面内Ntable其中一个里面有repeater,对于这个table

不能添加runat="server" 一旦添加运行就报错,其他的table都没关系

报的错误是:编译器错误消息: CS1502: 与“System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)”最匹配的重载方法具有一些无效参数

 

TableWeb 服务器控件与其他表元素的比较:

 

通常,表不仅用来显示表格信息,它还是在网页上格式化信息的一种方法。在 Web窗体页上创建表有多种方法:

 

1,HTML 表。您可以添加 HTML <table>元素。如果所创建的是静态表(运行时将不在其中添加或更改内容的表),则应使用 HTML 表,且不要使用 Table 控件。

 

2,HtmlTable 控件。这是一个 <table>HTML 元素,已通过添加 runat=server 属性将其转换为 HTML 服务器控件。您可以在服务器代码中对该控件进行编程。

 <table>       <tbody>            <tr>              <td></td>            </tr>       </tbody> </table>


3,Table。这是一种 Web 控件,它允许您使用与其他 Web控件一致的对象模型来创建和操作表(例如,添加表行和单元格)。


<asp:Table ID="Table1" runat="server"></asp:Table>


   通常,当您希望在运行时通过代码向表中添加行和单元格(列)时,可使用 Table Web服务器控件。尽管您也可以将其用作带有预定义行和列的静态表,但在这种情况下,使用 HTML <table> 元素更为简单。


   Table Web 服务器控件比 HtmlTable 控件更易于编程,因为它提供了与其他Web 服务器控件一致的、具有类型化属性的对象模型。(此模型在 Table、TableRow 和 TableCell 控件之间也是一致的。)

因为需要查询界面上的table中的值,固需要添加runat=server,出现错误。


 


解决方法:

 

    既然给table添加runat=server会报错,那么我们将table的父类添加runat=server在这里即div,然后取得它的子类对象,即可得到table的值(在div中通过FindControl发现控件这个方法取得)。

 

html代码:


<div class="cnt" style="width:100%; height:165px; overflow:scroll;" id="StuClass"  runat="server">               <table class="data-table history" id="dtStudent" border="0" cellspacing="0" cellpadding="0" width="400px" >                         <tbody>                                  <asp:Repeater ID="repStudent" runat="server">                                       <ItemTemplate>                                            <tr>                                              <td align="center"><asp:CheckBox ID="CheckBox3" runat="server"></asp:CheckBox></td>                                               <td class="txt c">                                               <%#Eval("TeacherCode") %>                                                </td>                                                 <td class="txt c">                                                <%#Eval("TeacherCode") %>                                                </td>                                                                                              </tr>                                      </ItemTemplate>                               </asp:Repeater>                         </tbody>               </table> </div>

web层代码:


  protected void lbtnAdd_Click(object sender, EventArgs e)        {            //通过包含班级table的div找到班级table,并转换成html对象,其中StuClass为div的id值            System.Web.UI.HtmlControls.HtmlTable dtStudent = (System.Web.UI.HtmlControls.HtmlTable)StuClass.FindControl("dtStudent");            //班级下的学生            DataTable dt = BindClassByStudent();            TeaExamineeBLL TeaExamineeBLL = new BLL.Teacher.TeaExamineeBLL();            //ArrayList arrStudentInfo = new ArrayList(); //定义某种类型的考生的集合            DataTable dtStudentInfo = new DataTable();            bool flagIsChecked = false;            for (int i = 0; i < dtStudent.Rows.Count - 1; i++)            {                CheckBox ChkBxItem = (CheckBox)dtStudent.Rows[i].FindControl("chkStu");                if (ChkBxItem.Checked == true)                {                    flagIsChecked = true;                    //退出for循环;                    break;                }            } }


     总结:对于这个问题已经有解决办法,但是仍然不是很明白,为什么当table包含repeater时且两个都有runat属性时,就会出错,单独使用tablerunat却没有问题。而且repeater可以嵌套任何服务器控件,也不会出问题。

 

     PS-简单理解:可能是对于html控件(加runat=server)后变成服务器控件扔不可以嵌套真正的服务器控件,不知道对不对,希望大家指点!




作者:hejingyuan6 发表于2013-11-6 17:51:12 原文链接
阅读:240 评论:28 查看评论
 [原]BS中保存参数

          

开发中经常需要将值存起来,当点击某一项时以便知道点击了哪一项。

 

一:应用JS页面跳转(牛腩中讲到)

HTML:

<td class="txt c"><a  href='ModifyExamStudentInformationVir.aspx?ExanID=<%#Eval("ExanID")%> & WorkNo=<%#Eval("WorkNo")%>' target="_blank"><%#Eval("CourseTypeCode") %></a></td>

后台:

string WorkNo = Request.QueryString["WorkNo"];string ExamID = Request.QueryString["ExamID"];

二:使用LinkButton的CommandArgument保存参数方式。(无需跳转页)

 

LinkButton组件是一个服务器端的组件,类似于HTML中的<A>标识符。主要作用是就是在页面中显示一个超链接。当这个链接被按动的时候,页面就会往服务器端传递信息,并且在服务器端来处理相应的事件。

 

1LinkButton常用属性和事件:

 

a,CommandName,CommandArgument这二个属性在功能上基本相同,当Click事件被触发的时候,通过这二个属性可以方便的往服务器端传递数据。

b,OnClick这个事件是当组件被Click的时候触发

c,OnCommand这也是一个事件,并和上面OnClick事件类似,区别在于,这个事件在被触发的时候,往服务器端传递CommandName,CommandArgument属性值.

 

2CommandName属性和CommandArgument属性:

 

LinkButton组件中CommandName属性和CommandArgument有着非常重要的作用。


举例如下:


假如页面中有100 LinkButton,那么在服务器端要判断到底是哪个LinkButton被按动了。如果没有这二个属性,可以通过给每一个LinkButtonText属性赋值,然后通过检测Text属性值,来判断到底是哪个LinkButton被按动了。可以通过给每一个LinkButton命不同的名然后在事件处理函数中,通过检测Sender属性值来判断哪个LinkButton被按动。虽然上述这些方法都是可行的,但无一不繁琐。有了CommandName属性和CommandArgument属性就可以方便的解决这些问题。

 

在程序中给LinkButtonCommandName属性和CommandArgument属性赋值,然后通过OnCommand事件中,可以得到从CommandEventArgs类中的数据,从而判断哪个 LinkButton动。CommandEventArgs类存储了和按钮(Button)事件相关的数据,并且可以在事件处理中通过CommandEventArgs类的属性来访问数据。当LinkButton被按动后,这个LinkButton所触发的数据都被储存到服务器的CommandEventArgs类中,访问CommandEventArgs类中的属性就访问了被按动的LinkButton

 

3,LinkButton使用方法举例说明(根据id值去服务器查找):


前台:


代码如下:

<asp:LinkButton runat="server" ID="lbtnUp" CommandArgument='<%#Eval("id") %>' OnClick="lbtnUp_Click">修改</asp:LinkButton>

后台:


代码如下:


protected void lbtnUp_Click(object sender, EventArgs e){   string id = ((LinkButton)sender).CommandArgument;}

应用举例(直接用js显示):


当网页上有多个 LinkButton 控件时,使用 CommandName 属性指定或确定与所单击的 LinkButton控件关联的命令名。可以用标识要执行的命令的任何字符串来设置 CommandName 属性。然后,可以以编程方式确定 LinkButton控件的命令名并执行相应的操作。

使用 CommandArgument 属性可以指定命令的补充信息(如指定 Ascending 排序顺序)。


<%@ Page Language="C#" AutoEventWireup="True" %><html><head><script language="C#" runat="server">           void LinkButton_Command(Object sender, CommandEventArgs e)       {         Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument;      }    </script> </head><body>    <form runat=server>       <h3>LinkButton Command Event Example</h3>        <asp:LinkButton id="LinkButton1"            Text="Order Item 10001"           CommandName="Order"            CommandArgument="10001"            OnCommand="LinkButton_Command"            runat="server"/>       <br>        <asp:LinkButton id="LinkButton2"            Text="Order Item 10002"           CommandName="Order"            CommandArgument="10002"            OnCommand="LinkButton_Command"            Runat="server"/>       <br>      <p>       <asp:Label id="Label1" runat="server"/>    </form></body></html>

附加:LinkButton绑定多值


举例:

<asp:LinkButton ID="btnSell" class="btn" OnCommand="btnSell_Click" CommandName="Skip"CommandArgument="<%# Eval("TicketID").ToString()+"|"+Eval("TotalCount").ToString()+"|"+Eval("SellCount").ToString() %>' runat="server"></asp:LinkButton>  

后台:

  public void btnSell_Click(object sender, CommandEventArgs e)    {        string parmString= e.CommandArgument.ToString();        string[] parmStr = parmString.Split('|');         Response.Redirect("./app_visit_detail.aspx?id=" + parmStr[0] + "&appName=" + parmStr[1] + "&logonTime=" + parmStr[2]);    }



应用Split函数,将获取到的字符串在字符串的'|'处拆分即可


举例:

如何在字符串的空格处拆分该字符串

DimTestString As String = "Look at these!"

' 返回的数组包含 "Look", "at",and "these!".

DimTestArray() As String = Split(TestString)

 



作者:hejingyuan6 发表于2013-10-29 15:13:11 原文链接
阅读:208 评论:23 查看评论
 [原]数据库系统原理


     数据库系统原理这门课,主要讲了数据库系统的发展,SQL语言,数据库管理,以及设计数据库时的方法(EA模型,关系模型).以下是我对这本书的系统性理解.

 

             

 

图解:

 

1,数据库的发展和应用是相互促进的

2,大量的应用产生了数据库管理系统.(SQL Server 2000是微软推出的关系型数据库管理系统,SQL语言的基础上进行了扩展)

3,应用数据库时,我们要考虑数据库的管理(安全性,完整性,并发控制等)以及SQL语言的使用(查询,更新,视图等)

4,对于数据库的设计(关系模型等),是为了让我们使用数据库时更灵活,方便.避免一些数据冗余,数据不一致的问题出现.

5,通过合理的设计和数据库的提供的语言我们即能建立数据库.当然管理也是为了让数据库避免出现一些数据上不一致和安全等的错误.

 

 

     这本书的内容其实和我们的日常学习息息相关,书中所述的大部分内容我们都用过,只是这本书从数据库的来源讲起,让我们对数据库系统有了一个系统的了解.对于数据库的设计来说我们也都做过系统,如何设计数据库的表,字段等,我们也都经历过这些阶段,但是如何要设计安全性高,适合我们系统的数据库设计,还需要我们在实践中不断摸索.



 

作者:hejingyuan6 发表于2013-10-9 16:33:26 原文链接
阅读:273 评论:18 查看评论
 [原]jQuery学习


    Jquery是所谓的javascript的框架,其实就是javascript函数的集合,打包.它是轻量级的js库,这是其它的js库所不及的,它兼容CSS3,还兼容各种常用浏览器。

    JQuery是一个快速的,简洁的JavaScript库,使用户能更方便地处理HTMLdocuments、events、实现动画效果,并且方便地为网站提供AJAX交互。

    JQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。JQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。


                 


强大的选择器:

 

    jQuery中的选择器完全继承了CSS的风格.利用jQuery选择器,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为,而无需担心浏览器是否支持这一选择器.

 

举例说明:

 

jQuery选择器:

$("#myELement")    //选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("div")          // 选择所有的div标签元素,返回div元素数组 $(".myClass")      //选择使用myClass类的css的所有元素 $("*")             //选择文档中的所有的元素,可以运用多种的选择方$("#myELement,div,.myclass")  //进行联合选择

css选择器:

ul,li{   }  .Loading{  }  #contentsecond{  }

出色的DOM操作封装:

 

           DOM是一种与浏览器,平台,语言无关的接口,使用该接口可以轻松地访问页面中所有的标准组件.

     每一张网页都能用DOM表示出来,而每一份DOM都可以看做一棵DOM.这样我们应用DOM来获取网页中的节点,进而设置节点的属性,jQuery中对节点(页面中所有的标准组件)的操作就是对DOM的操作.


     例如:

           $("ul li:eq(1)").remove(); //获取第2<li>元素节点后,将它从网页中删除

           Remove()方法:作用是从DOM中删除所有匹配的元素,传入的参数用于根据jQuery表达式来筛选元素

 

jQuery中的Ajax

 

     Ajax全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),它并不是指一种单一的技术,而是有机地利用了一系列交互式网页应用相关的技术所形成的结合体.它的出现,揭开了无刷新更新页面的新时代.

     jQuery中的Ajax

     jQueryAjax操作进行了封装,jQuery$.ajax()方法属于最底层的方法,2层是load().$.get()$.post()方法,3层是$.getScript()$.getJSON()方法.

 

     举例:

           load方法:是jQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中。

     $.getScript():直接加载.JS文件,与加载HTML片段一样简单方便。

 

 

jQuery插件(丰富的插件支持):


    插件也称为扩展,是一种遵循一定规范的应用程序接口编写出来的程序。

         jQuery的易扩展性,吸引了来自全球的开发者共同编写jQuery的插件。使用这些经过无数人检验和完善的优秀插件,可以帮助用户开发出稳定的应用系统,节约项目成本。开发者可使用插件来进行表单确认、图表种类、字段提示、动画、进度条等任务。

 

种类:

封装对象方法

封装全局函数

选择器

 

总结:

     

     对jQuery的学习还需要我们在今后的使用中不断加强。以上的总结只是一些基础的积累,让我对jQuery有一个大概的了解,它的出现使网页可以更加多彩,在js的基础上,增加了许多实用,绚丽的功能(特殊动画效果),它解决了许多JavaScript问题和难题。使JavaScript编程变得更加有趣!

           jQueryjs的一个轻量级的函数库。它封装了js的方法等,对于jQuery中已经封装好的方法,我们可以在操作时,直接访问jQuery的中的函数来操作和美化我们的界面。让我们写更少的代码,做更多的事情!




作者:hejingyuan6 发表于2013-10-2 9:42:45 原文链接
阅读:544 评论:21 查看评论
 [原]DOM与javascript,jQuery的关系


DOM


DOMW3C(万维网联盟)的标准。它定义了访问HTMLXML文档的标准。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。

DOM是一种与浏览器,平台,语言无关的接口,使用该接口可以轻松地访问页面中所有标准组件DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容,所以如果你下载一个JavaScript语言的参考帮助文档来查的话,就连妇孺皆知的document.write方法也找不到。


简单理解:

DOMdocument object model其实是浏览器内元素对象的一个总称。

DOM即将页面中的各个元素节点,用树的形状表示出来,提供了标准的访问方法,供我们对它进行操作。

 

W3C DOM 标准被分为 3 个不同的部分:


    核心 DOM - 针对任何结构化文档的标准模型

    XML DOM - 针对 XML 文档的标准模型

    HTML DOM - 针对 HTML文档的标准模型

 

JavaScript的关系

  

通过 JavaScript,您可以重构整个 HTML 文档。您可以添加、移除、改变或重排页面上的项目。要改变页面的某个东西,JavaScript 就需要对 HTML 文档中所有元素进行访问的入口。这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。

比如:一个<table>是一个DOM对象,javascript可以对其添加,删除,等操作.

 

Jquery

 

jquery是所谓的javascript的框架,其实就是javacript函数的集合,打包.

 

1.jQuery对象和DOM对象


DOM对象,即是我们用传统的方法(javascript)获得的对象,jQuery对象即是用jQuery类库的选择器获得的对象;

 

代码如下:

var domObj = document.getElementById("id"); //DOM对象var $obj = $("#id"); //jQuery对象;

jQuery对象就是通过jQuery包装DOM对象后产生的对象,它是jQuery独有的。如果一个对象是jQuery对象,那么就可以使用jQuery里的方法


例:

$("#foo").html();//获取id为foo的元素内的html代码,html()是jQuery特有的方法;

上面的那段代码等同于:

document.getElementById("foo").innerHTML;


注意:在jQuery对象中无法使用DOM对象的任何方法。

例如:$("#id").innerHTML和$("#id").checked之类的写法都是错误的,可以用$("#id").html()和$("#id").attr("checked")之类的 jQuery方法来代替。同样,DOM对象也不能使用jQuery方法。


2.jQuery对象和DOM对象的互相转换

 

jquery对象和dom对象是不一样的!比如jquery对象不能使用dom的方法,dom对象不能使用jquery方法,那假如我jquery没有封装我要的方法,那能怎么办呢?这时我们可以将jquer对象转换成dom对象

 

jquery对象转换成 dom对象


jquery提供了两种方法将一个jquery对象转换成一个dom对象,即[index]和get(index)。可能有人会觉得奇怪,怎么是用下标呢,没错,jquery对象就是一个数组对象.

下面代码将演示一个jquery对象转换成dom对象,再使用dom对象的方法


代码如下:

var $cr=$("#cr"); //jquery对象var cr = $cr[0]; //dom对象 也可写成 var cr=$cr.get(0);alert(cr.checked); //检测这个checkbox是否给选中

dom对象转换成jquery对象


对于一个dom对象,只需要用$()把dom对象包装起来,就可以获得一个jquery对象了,方法为$(dom对象);

 

代码如下:

var cr=document.getElementById("cr"); //dom对象var $cr = $(cr); //转换成jquery对象

通过以上的方法,可以任意的相互转换jquery对象和dom对象.


 

ps:平时用到的jquery对象都是通过$()函数制造出来的,$()函数就是一个jquery对象的制造工厂.

 

建议:如果获取的对象是jquery对象,那么在变量前面加上$,这样方便容易识别出哪些是jquery对象

例如:var $variable = jquery对象; 

如果获取的是dom对象,则定义如下:

var variable = dom对象


总结:

         

    一直都知道jQueryJavaScript,但是对于DOM的理解一直不是很明白。不明白JavaScript中为什么要讲解DOM?而且对它的理解并没有和其他的学习内容建立起联系,今天通过查资料,才知道它实现的作用。

        BS阶段中,它是我们在学习中不可获取的内容,DOM把网页和脚本以及其他的编程语言联系了起来,开发人员可以通过文档对象的属性、方法和事件来掌控、操纵和创建动态的网页元素。简单的说,它能让我们轻松的访问页面中的每个节点,对每个节点设置不同的属性,实现不同的操作等。




作者:hejingyuan6 发表于2013-9-25 8:01:41 原文链接
阅读:798 评论:36 查看评论
 [原]加密技术


引入: 


随着计算机技术和微电子技术的发展,由于互联网本身的不安全性,我们不仅需要对口令加密,有时也需要对网络上传输的文件进行加密.加密作为保障数据安全的一种方式,加密技术通常分为两大类:“对称式”和“非对称式”。

 

对称密码(置换和代换)


如图:


X:为明文,算法的输入

Y:  通过密钥K,加密后的密文

K:为密钥

对称密码单密密码或传统密码):发送方和接收方使用相同的密钥


步骤:

1,加密算法根据输入信息X和密钥K,生成密文Y (具体的函数由密钥K的值决定)

其中要通信的双方持有相同的密钥,通过安全通道传递.

2,到达目的地后,通过密钥K解密即可得到明文.

 

使用最广泛的加密体制是数据加密标准(DES-Data Encryption Standard)使用64位分组长度和56为密钥长度.其他常见的对称加密算法:三重DES,高级加密标准(AES-Advanced Encryption Standard),Blowfish算法,RC5算法.


缺点:

通信双方事先对密钥达成一致协议在.现实中,未见过面的双方使用应用对称密钥密钥进行通信.解决方案-使用双方都信任的密钥分发中心KDC(key Distribution Center).

 

 

公钥密码(基于数学函数的算法)


如图:


 

非对称密码(双钥密码或公钥密码):收发双方使用不同的密钥。(仅根据密码算法和加密密钥来确定解密密钥在计算上是不可行的)


步骤:

1,每一用户产生一对密钥,用来加密和解密消息

2,每一用户将其中一个密钥存放在公开的寄存器或其他可访问的文件中,该密钥称为公钥,另一密钥是私有的.

3,甲发送消息给乙,则甲用乙的公钥对消息加密

4,乙收到消息后,用自己的私钥对消息解密.


  对于公钥加密,通信实体必须先交换公共密钥.一个用于可以通过很多方式公布它的公共密钥,例 如在个人网   页上,但是这种简单的方式可能会遭到第三方的主动攻击,解决办法-认证中心CA(Certification Authority)


    RAS算法

  第一个既能用于数据加密也能用于数据签名的算法.以发明者的名字命名,采用的分组密码。其他的公钥加密   算法:ElGamal算法(数据加密,数据签名),背包加密算法


对比:

 

对称加密体制的优缺点: 


优点:

          加密速度快,保密度高。 

缺点: 

1.密钥是保密通信的关键,发信方必须安全、妥善的把密钥送到收信方,不能泄露其内容,密钥的传输必须安全,如何才能把密钥安全送到收信方是对称加密体制的突出问题。 

2. n个合作者,就需要n不同的密钥,如果n个人两两通信需要密钥数量n(n-1),使得密钥的分发复杂。即,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。 

3.通信双方必须统一密钥,才能发送保密信息,如果双方不相识,这就无法向对方发送秘密信息了。 

4.难以解决电子商务系统中的数字签名认证问题。对开放的计算机网络,存在着安全隐患,不适合网络邮件加密需要。 

    

 

非对称加密体制的优缺点:


缺点: 

     加密算法复杂,加密和解密的速度比较慢。 

优点: 

1.公钥加密技术与对称加密技术相比,其优势在于不需要共享通用的密钥。  

2.公钥在传递和发布过程中即使被截获,由于没有与公钥相匹配的私钥,截获的公钥对入侵者没有太大意义。

3.密钥少便于管理,N个用户通信只需要N对密钥,网络中每个用户只需要保存自己的解密密钥。 

4.密钥分配简单,加密密钥分发给用户,而解密密钥由用户自己保留。

 

总结:


通过我们的了解,对称加密的实现比较简单,但是安全性不是很高,一般用在对安全要求级别不是很高的情况下,但是非对称加密比较复杂,但是安全性很高,在实际应用中需要我们综合利弊考虑.




作者:hejingyuan6 发表于2013-9-17 19:46:35 原文链接
阅读:391 评论:15 查看评论
 [原]Internet基础


互联网是什么?

        

         Internet是一个互联网,它是将提供不同服务的,使用不同技术的,具有不同功能的物理网络互连起来而形成的。

         TCP/IP是一个协议集,它对Internet中主机的寻址方式,主机的命名机制,信息的传输规则以及各种服务功能均做了详细的约定。

 


什么是IP协议

 

         IP作为一种互联网协议,运行于互联层,屏蔽各个物理网络的细节和差异。IP协议精确定义了IP数据报格式,并且对数据报寻址和路由,数据报分片和重组,差错控制和处理等做出了具体规定。

 

举例:

 

      如果说IP数据报是IP互联网中行驶的车辆,那么IP协议就是IP互联网中的交通规则,连入互联网的每台计算机及处于十字路口的路由器都必须熟知和遵守该交通规则。

 

               IP互联网:

 

       IP互联网是一种面向非连接的互联网络,它对各个物理网络进行高度的抽象,形成一个大的虚拟网络。它是由不同的网络借助IP路由器互连而成的。

 

               IP地址:

 

背景:


        以太网利用MAC地址标识网络中的一个结点,两个以太网结点需要知道对方的MAC地址才能通信。但是以太网并不是唯一的网络,世界上存在着各种各样的网络,这些网络使用的技术不同,物理地址的长度,格式等表示方法也不相同。因此,如何统一结点的地址表示方式,保证信息跨网传输成为一大难题。

 

作用:


        统一的地址表示方式。IP协议提供了一种互联网通用的地址格式,用于屏蔽物理网络的地址差异。

 

结构:


        由网络号和主机号两个层次组成。网络号用来标识互联网中的一个特定网络,而主机号则用来标识该网络中主机的一个特定连接。

 

分类:


         IP协议规定,IP地址的长度为32位。这32位包括了网络号部分和主机号部分。

         在互联网中,网络数是一个难以确定的因素,而不同种类的网络规模也相差很大。为了适应各种网络规模的不同,IP协议将IP地址分为A,B,C,DE五类,分别使用IP地址的前几位区分。

 

表示方式:


         为了方便用户的理解和记忆,采用了点分十进制标记法,即将4个字节的二进制数值转换成4个十进制数值,每个数值中间用“.”隔开。

 

子网掩码:


         对于一些小规模的网络,即使采用一个C类的网络地址仍然是一种浪费,因而在实际应用中,为克服IP地址的浪费现象。-子网掩码

 

子网编址方式:标准的IP地址分为网络号和主机号两层。为了避免IP地址的浪费,子网编址将IP地址的主机号部分进一步划分成子网络部分和主机部分。


子网表示法:IP地址和它的子网掩码相结合,就可以判断出IP地址中哪些位标识网络和子网,哪些表示主机。

 

地址解析协议(ARP-Address Resolution Protocol

 

        高层软件通过IP地址来指定源地址和目的地址,而低层的物理网络则通过物理地址来发送和接收信息。

        IP地址映射到物理地址的实现方法很多。地址解析协议是以太网经常使用的映射方法,它充分利用了以太网的广播能力,将IP地址与物理地址进行动态绑定。

 ARPIP地址-通过ARP解析可以使IP地址实现到物理地址的映射。

 

         互联网中有众多协议,例如ICMP(Internet Control Message Protocol-互联网控制报文协议)用于传输控制报文和传输差错控制报文,RIP(Routing Information Protocol)和OSPF(Open Shortest Path First)均为动态路由选择协议等。这些协议的出现都是为internet服务

    以上只是简单介绍我们日常常用的协议,以及它们解决的问题,分清它们之间的关系,让我们理解更深刻。



作者:hejingyuan6 发表于2013-9-10 16:14:30 原文链接
阅读:384 评论:29 查看评论
 [原]JS中的正则表达式

简介:


在计算机科学中,是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。

正则表达式验证一系列有规律的表达式


 与正则表达式相关的两个方法


match()replace()

 replace()方法返回根据正则表达式进行文字替换后的字符串的复制。

     语法:stringObj.replace(rgExp,replaceText)

 match()方法使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。

     语法:stringObj.match(rgExp)


 正则表达式写在两个双斜杠之间,最后一个双斜杠后加g,双斜杠之间写上想要查找的字符串.g代表global的意思即全局。当然如果想查找的内容不区分大小写,则在g后面加上i字母。


作用:


1,测试字符串内的模式。

例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。或者用户名输入是否为空格等。这称为数据验证。

       2,替换文本。

可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

3,基于模式匹配从字符串中提取子字符串。

可以查找文档内或输入域内特定的文本。


举例1(简单):


<scriptlanguage="javascript" type="text/javascript">

varstr="windows是非常优秀的系统,我喜欢windows!"

varreg=/Windows/gi;

vartemp=str.replace(reg,"Linux");

alert(temp);

</script>

 


举例2:验证qq号码,5位数据以上



^代表以xxx开头

$代表以xxx结尾

\d代表0-9的数字,后面小括号(5,)代表5位数字以上

正则表达式对象的一个方法:test,符合要求会弹出true,否则为false

 

<scriptlanguage="javascript" type="text/javascript">

varqq=5569

varreg=/^\d(5,)$/g;

if(!reg.test(qq))

   {

alert("qq号码格式不正确!");

return;

}

</script>

 


 

对于正则表达式的语法参考msdnhttp://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx

 


 

作者:hejingyuan6 发表于2013-8-27 16:55:28 原文链接
阅读:414 评论:33 查看评论
 [原]JS的深入总结

什么是JavaScript


JavaScript库中主要包含一些常用的函数,我们都使用过JQuery,它们虽然不是JavaScript语言的一部分,但是使用这些经过验证的可靠的函数会使你的代码更清晰,更易读,而且当别人需要调试或搞懂你的开发成果时更容易被人理解.


编写自己的JavaScript库时的注意事项


1,不要版本检测--使用能力检测


浏览器的版本很容易被淘汰而且种类繁多,我们不可能为了市面上每一款前途未卜的浏览器都花费实践去检测.

作为浏览器检测的方法的最佳实践是能力检测,指的是在代码执行之前检测某个脚本对象或方法是否存在,而不是依赖于你对哪个浏览器具有哪些特定的了解.如果方法或对象存在,那么浏览器能够使用它,且代码也可以按照预期执行.

方法:


 

2,使用命名空间


在设计类和类成员过程中,不可避免的类成员中的方法或者类的名称会出现相同的情况,这样就会使类的使用变得复杂,代码的混乱造成可读性降低,使用命名空间可以解决此类难题。而要避免这些问题的困扰,只需要记住两点:唯一性,不共享.

唯一性:为自己的命名空间挑选一个不会在别处被使用的名字.

不共享:1,闭包2,保证你的代码被包含在它自己的小空间中.

 


 

闭包:

闭包就是能够读取其他函数内部变量的函数。

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

1,闭包外层是个函数.

2,闭包内部都有函数.

3,闭包会return内部函数.

4,闭包返回的函数内部不能有return.(因为这样就真的结束了)

5,执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在.

 

闭包博客链接:http://www.jb51.net/article/24101.htm

 

作用域链:

作用域链作用:

Javascritp需要查询变量x的值时,它首先开始查询作用域链的第一个对象,如果该对象有名为x的属性,就采用这个值,如果没有,就查询作用域链上的第二个对象,以此类推。

作用域链的顺序:

根据执行环境来定,假设当前执行环境在两层嵌套的局部函数中,当前函数的调用对象处于作用域链第一位,外层函数调用对象在作用域链第二位,然后再外面的全局对象在第三位。

 

面向对象成员方法:


静态方法:指的是只能给某个特定的对象赋值,不能重用,即我们直接添加到了对象实例中。静态成员只存在于对象的一个具体实例而不存在于构造函数中。

公有方法:构造函数中this赋值也是一种。即能够使实例化的对象包含的方法称为公有方法,需要修改函数原型,即prototype属性。要添加公有方法只需要使用点操作符向它的原型添加方法即可

私有方法:就是在构造函数中定义的变量和函数。

特权方法:即this方法,可以访问私有成员

 

call()apply()方法:


这两个方法可以指定函数的执行环境。即将一个方法强行绑定到一个对象上,返回执行结果

call()apply()方法的区别为当执行的方法是有参数的,call是将每一个参数逐一列举出来,而apply()方法是将参数作为一个数组放在第二个参数(第一个参数为对象)的位置上。

 

DOM文件对象模型(Document Object Model,简称DOM


支持对HTMLXML的操作.让我们可以通过JavaScript,以编程方式控制网页上的所以元素和属性。DOM的主要思想是HTML上每个元素分别对应于DOM中的一个节点。

 



 

作者:hejingyuan6 发表于2013-8-14 17:59:52 原文链接
阅读:385 评论:41 查看评论
 [原]CSS基础


         CSS(Cascading Style Sheet),中文译为层叠样式表,是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言.

         HTML的缺陷:当需要修改某些样式时,需要修改所有的样式属性--CSS引入


      


CSS选择器


ID标记和Class标记的区别:

ID标记不允许同时采用在两个标记中的,因为ID不但适用于CSS代码还适用于JS代码,当js中通过idhtml代码进行寻找时,如果一个ID同时出现在两个标记中,将导致js的语法混乱


CSS继承


选择器的嵌套

所谓嵌套就是如果一个标记中包含另外一个标记,那么被包含的这个标记首先会继承前面的这个标记


但是CSS继承也有局限性,在CSS中,继承是一种非常自然的行为,我们甚至不需要考虑是否能够这样去做,但是继承也有其局限性。  首先,有些属性是不能继承的。这没有任何原因,只是因为它就是这么设置的。举个例子来说:border属性,大家都知道,border属性是用来设置元素的边框的,它就没有继承性。


CSS滤镜的使用


概述

       CSS滤镜并不是浏览器的插件,也不符合CSS标准,而是微软公司为增强浏览器功能而特意开发的并整合IE浏览器中的一类功能的集合。

CSS滤镜的标识符是filter,语法:filter:filtername(parameters)

 

透明度:filter:alpha(opacity=50)即透明度为50%

模糊:filterprogid:DXImageTransform.Microsoft.blur(pixelradius=4,makeshadow=false)

pixelradius为模糊效果

透明色:filter:chroma(color=ff6800)即将图片中的某一种颜色直接去掉

翻转:filter:fliph---水平翻转,flipv--竖直翻转

遮罩:filter:mask(color=#8888ff)希望采用遮罩效果的颜色,紫色

波浪:filter:wave(add=0,freq=2,lightstrength=70,phase=75,strength=4)

 

CSSDIV定位


1divspan标记

行内元素:span---一个容器

块级元素:div--一个容器

 

div与span的区别就是:span为行内元素,div为块级元素

块级元素是占满一行的,而行内元素的大小只与内容大小有关

2,盒子模型

博客链接:http://blog.csdn.net/hejingyuan6/article/details/8960189

3,元素的定位

Float:浮动

Position:相对定位,绝对定位

z-index:哪个排在上方。浏览器中默认的是后出现的代码出现在先出现的代码上方

4,给图片签名:直接将签名移动到图片上

 

CSS排版


1,将页面用div分块

2,设计各块的位置

固定宽度且居中的版式

方法一:将整个body设置成居中,然后将container设置成固定宽度

方法二:其中containerwidth700px

            

 

CSS与其他语言的应用


CSSJavaScript

JavaScript概述

JavaScript是一种基于对象的脚本语言,使用它可以开发Internet客户端的应用程序。JavaScriptHTML页面中以语句的方式出现,并执行相应的操作。

CSSXML的综合应用

XML基础

html类似,xml的各个标记也是以<tag>开始</tag>结束的。而xml语法上要求更为严格,如果有开始标记就必须有结束标记。对于空标记,xml要求标记必须用一个斜杠和一个右尖括号来表示,例如<img/>html中的标记都是预定义好的,而xml我们可以自己定义标记

CSSAJAX的综合应用

AJAX:局部刷新

 

总结:应用CSS可以更好的控制网页的布局,美化我们的界面。而且CSS实现了格式和结构的分离,使得我们修改页面的外观更加简单,方便。

 


作者:hejingyuan6 发表于2013-7-30 19:40:37 原文链接
阅读:554 评论:61 查看评论
 [原]JavaScript基础

        JavaScript是一种面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢,验证步骤浪费的时间太多。于是加入了Javascript,提供了数据验证的基本功能。

       JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。

      导图:


 

JavaScript语言的基本特点:

1,是一种脚本编写语言

脚本语言是一种解释性语言,它的特点是不需要编译,可以直接用,由解释器来负责解释。支持快速开发,方便维护和跨平台。而编译语言(vb,c,c++,c#)写的代码必须是经过编译才能运行的.

解释性语言与编译性语言:解释性语言不保存,编译性语言保存

 


编译性语言效率相当高,速度也特别快。但缺点是需要先编译,然后再执行。脚本语言的优势在于它的动态性,可以即改即用。

2,基于对象的语言(vb,js)

基于对象的编程语言没有提供象抽象、继承、重载等有关面向对象语言的许多功能。而是把其它语言所创建的复杂对象统一起来,从而形成一个非常强大的对象系统。它可以根据需要创建自己的对象,从而进一步扩大语言的应用范围,增强编写功能强大的Web文档。

3,简单性

是一种基于java基本语句和控制流之上的简单而紧凑的设计,其次它的变量类型是采用弱类型,并未使用严格的数据类型

4,安全性

不允许访问本地硬盘,不能将数据存入服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互.从而有效地防止数据的丢失

5,动态性

可以直接对用户或客户端输入做出响应,无须经过web服务程序.它对用户的响应,是采用以事件驱动方式进行的.

6,跨平台性

JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行

 

        JavaScript的出现使得网页和用户之间实现了一种实时性的,动态的,交互性的关系,使网页包含更多活跃的元素和更加精彩的内容.JavaScript主要用于表单验证.


宏观上:


       它和vb语言都是基于对象的,vb语言是编译语言,而JavaScript是脚本语言,它不需要编译,可以直接用,由解释器来负责解释.而编译语言(vb,c,c++,c#)写的代码必须是经过编译才能运行的.

 



作者:hejingyuan6 发表于2013-7-22 21:52:28 原文链接
阅读:502 评论:55 查看评论
 [原]抽象类和接口


什么是抽象类?


抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。


什么是接口?


接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。接口方法不能包含任何实现。一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。

 

对于抽象类和接口找了两个实例

 

抽象类:http://wenku.baidu.com/view/79c4833eeefdc8d376ee32e8.html

接口:http://www.cnblogs.com/zhangzt/archive/2009/11/28/1612556.html

这两个实例中分别应用的是接口和抽象类实现,当我需要添加其他类型的枪支或是其他的程序员,都可以很容易的添加,扩充性很好,这样使得我们的代码更容易维护!当然这两个实例都很简单,这样的话感觉两者没有什么区别。

 

下面说一下他们的区别:


1,接口支持多继承;抽象类不能实现多继承。举例当使用抽象类时,由于不能实现多继承,这时,需求改变需要添加新的功能,我们就可以用接口实现。

               

2,抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明

3,抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现

 

理解:


1,类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象

2,如果行为跨越不同类的对象,可使用接口,对于一些相似的类对象,用继承抽象类

3,从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本布置子类的存在,方法如何实现还不确认,预先定义。

4,实现接口和继承抽象类并不冲突。

 例如:

//1. 定义抽象类    public abstract class Animal    {        protected string _name;        //声明抽象属性        public abstract string Name        {            get;        }        //声明抽象方法        public abstract void Show();        //实现一般方法        public void MakeVoice()        {            Console.WriteLine("All animals can make voice!");        }    }//2. 定义接口    public interface IAction    {        //定义公共方法标签        void Move();    }//3. 实现抽象类和接口    public class Duck : Animal, IAction    {        public Duck(string name)        {            _name = name;        }        //重载抽象方法        public override void Show()        {            Console.WriteLine(_name + " is showing for you.");        }        //重载抽象属性        public override string Name        {            get { return _name;}        }        //实现接口方法        public void Move()        {            Console.WriteLine("Duck also can swim.");        }    }    public class Dog : Animal, IAction    {        public Dog(string name)        {            _name = name;        }        public override void Show()        {            Console.WriteLine(_name + " is showing for you.");        }        public override string Name        {            get { return _name; }        }        public void Move()        {            Console.WriteLine(_name + " also can run.");        }    }//4. 客户端实现    public class TestAnmial    {        public static void Main(string [] args)        {            Animal duck = new Duck("Duck");            duck.MakeVoice();            duck.Show();            Animal dog = new Dog("Dog");            dog.MakeVoice();            dog.Show();            IAction dogAction = new Dog("A big dog");            dogAction.Move();        }    }

    如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。

所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。

 

应用场合很简单了 (接口是设计的结果,抽象类是重构的结果)


1 优先定义接口

2如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。

 

通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才。



作者:hejingyuan6 发表于2013-7-18 14:31:37 原文链接
阅读:644 评论:49 查看评论
 [原]XML学习

    可扩展标记语言 (ExtensibleMarkup Language, XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML 被设计用来传输和存储数据

         XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

  

视频总结:



XML与数据库


存储数据方面:xml 比数据库,占用的资源少,操作方便,用来存储简单的信息,现在主要用在程序的配置文件上(比如web.xml)

数据库要有自己的服务器,操作要用到sql的语言

总之,数据库存储的是关系和操作复杂数据,xml来存储关系简单的数据,不涉及的复杂的操作和复杂的关系


XMLHTML关系:


XML不是用来替换HTML的技术

XMLHTML为不同的目的而设计

XML设计的核心是包含与传输数据

HTML设计的核心是显示数据


XMLHTML区别:


他们两个都是标记语言(ML),一个是超文本标记语言,一个是扩展标记语言。

1可扩展性:HTML不具备扩展性,而XML是原标记语言,可以用于定义新的标记语言。

2侧重点:HTML侧重于如何表现信息,而XML是侧重于如何结构化的描述信息。

3语法要求:HTML不要求标记的嵌套,配对等,不要求标记间具有一定的顺序,而XML则是严格要求嵌套,配对,遵循DTD的树形结构。

4可读性和维护性:HTML难于阅读维护,而XML结构清晰,便于阅读维护


DTDDocument Type Definition


         DTD是一种保证XML文档格式正确的有效方法,可通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能成为数据交换标准,因为不同的公司只需定义好标准DTD,各公司都能依DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。DTD文件是一个ASCII文本文件,后缀名为.dtd。

 

Schema(XML Schema Definition (XSD))


XMLSchema是以XML语言为基础的,它用于可替代DTD

一份XML schema文件描述了XML文档的结构。

 

总结:


XML应用:广告控件,treeview控件等

      配置文件

      数据交换----将一个Access数据库的内容成功导入SQL Server中,其中就是XML在起作用

      不同平台间的通信等等,对它的认识还需要在我们以后的学习中不断总结和理解!

 



作者:hejingyuan6 发表于2013-7-9 15:37:39 原文链接
阅读:534 评论:30 查看评论
 [原]ADO.NET连接方式

使用Command、DataReader和DataSet两种方法实现数据绑定

     方法1:使用Command和DataReader 

SqlConnection con = new SqlConnection("server=.;database=Department;uid=sa;pwd=123456");            con.Open();            string sqlStr = "select * from emp";             SqlCommand  sqlCmd = new SqlCommand(sqlStr, con);            SqlDataReader  reader = sqlCmd.ExecuteReader();            GridView1.DataSource = reader;            GridView1.DataBind();

      方法2:使用DataSet数据集(DataAdapter可以无需打开(con.Open()方法),可以自己实现)


            SqlDataAdapter sda = new SqlDataAdapter();            SqlConnection con = DB.createCon();            SqlCommand cmd = new SqlCommand();            string sqlStr = "select * from emp";            sda.SelectCommand = new SqlCommand(sqlStr, con);            DataSet ds = new DataSet();            sda.Fill(ds, "employee");            GridView1.DataSource = ds.Tables["employee"].DefaultView;            GridView1.DataBind();


    Fill方法隐式执行DataAdapter的SelectCommand中的SQL查询,查询的结果用于定义DataSet表的结构,并用数据来填充表。


SqlCommand和SqlDataAdapter的区别


    SqlCommand对应DataReader  SqlDataAdapter对应DataSet DataAdapter表示一组SQL命令和一个数据库连接,它们用于填充DataSet和更新数据源

    .NET中读取数据库中的数据有两种方式,一种是基于连接的方式,就象你所给出的程序那种方式,还有一种就是基于非连接的方式,就是你说的使用DataSet保存结果集。

    基于连接方式读取数据时,结果放在DataReader流中(内存流),DataReader是只向前且是只读,本代码中将DataReader的数据读出后放在一个泛型集合里,将泛型集合返回给方法的调用者,方法的调用者就可以对泛型集合进行各种操作。

    基于非连接方式读取数据时,需要将查询语句赋给DataAdapter的SelectCommand方法,通过DataAdapter的Fill方法将数据库中的数据填充到DataSet,然后DataSet就可以与数据显示控件进行绑定,进行用户交互了


SQLHelper中的方法:(方法2和此方法其实一样)

 

SqlDataAdapter是数据适配器,而SqlCommand是命令对象,SqlDataAdapterda = new SqlDataAdapter(cmd);就是执行你的SQL。

 

CommandType.Text代表执行的是SQL语句

CommandType.StoreProcedure代表执行的是存储过程

CommandType代表要执行的类型


Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable            Dim sqlAdapter As SqlDataAdapter          Dim dt As New DataTable          Dim ds As New DataSet          '还是给cmd赋值          cmd.CommandText = cmdText          cmd.CommandType = cmdType          cmd.Connection = conn          cmd.Parameters.AddRange(sqlParams)  '参数添加          sqlAdapter = New SqlDataAdapter(cmd)  '实例化adapter          Try              sqlAdapter.Fill(ds)           '用adapter将dataSet填充               dt = ds.Tables(0)             'datatable为dataSet的第一个表              cmd.Parameters.Clear()        '清除参数          Catch ex As Exception              MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")          Finally                            '最后一定要销毁cmd              Call CloseCmd(cmd)          End Try          Return dt      End Function  



作者:hejingyuan6 发表于2013-7-3 15:37:03 原文链接
阅读:465 评论:27 查看评论
 [原]ASP.NET 控件详解

1,验证控件

 

RequiredFieldValidator(必须字段验证)用于检查是否有输入值,限制空字段

CompareValidator(比较验证)按设定比较两个输入

RangeValidator(范围验证)输入是否在指定范围

RegularExpressionValidator(正则表达式验证)正则表达式验证控件

CustomValidator(自定义验证)自定义验证控件,通过客户端或服务器函数检查值

ValidationSummary(验证总结)总结验证结果,在页面中列出所有控件的验证错误

 

验证控件详解:http://www.51cto.com/specbook/14/3305.htm

 

2,数据绑定控件(RepeaterDataListGridView

 

repeater控件


    当我们应用repeater控件绑定数据时,即使设置了DataSource,因为Repeater控件不具备内置的呈现功能,所以我们得用一些模板来实现他的数据呈现,它支持如下模板

1,ItemTemplate  要为数据源中每个数据项都要呈现一次的 HTML 元素和控件。

2,AlternatingItemTemplate  

通常,可以使用此模板为交替项创建不同的外观,例如指定一种与在 ItemTemplate中指定的颜色不同的背景色。

3,HeaderTemplate  页眉设置

4,FooterTemplate  页脚设置

5,SeparatorTemplate  包含在每项之间呈现的元素。典型的示例可能是一条直线(使用 hr 元素)。

 

使用repeater分页功能:

 举例:

protected void Page_Load(object sender,EventArgs e)        {            if (!Page.IsPostBack)            {                this.lbNow.Text ="1";                RepeterBind();            }        }         private void RepeterBind()        {            int curPage = Convert.ToInt32(this.lbNow.Text);            SqlConnection con = DB.GetCon();            SqlDataAdapter sd = newSqlDataAdapter();            sd.SelectCommand = newSqlCommand("select * from emp", con);            DataSet ds = new DataSet();            sd.Fill(ds, "emp");            PagedDataSource ps = newPagedDataSource();            ps.DataSource =ds.Tables["emp"].DefaultView;            ps.AllowPaging = true;            ps.PageSize = 2;            //当前页数的索引            ps.CurrentPageIndex = curPage-1;            btnNext.Enabled = true;            btnUp.Enabled = true;            if (curPage == 1)            {                btnUp.Enabled = false;            }            if (curPage == ps.PageCount )            {                btnNext.Enabled = false;            }            Repeater1.DataSource = ps;            Repeater1.DataBind();        }         protected void btnUp_Click(objectsender, EventArgs e)        {            lbNow.Text =Convert.ToString (((Convert.ToInt32(this.lbNow.Text)) - 1));            RepeterBind();        }         protected void btnNext_Click(objectsender, EventArgs e)        {            lbNow.Text =Convert.ToString (((Convert.ToInt32(this.lbNow.Text)) + 1));            RepeterBind();        }
 

DataList控件


    DataList控件,类似于 Repeater 控件,用于显示限制于该控件的项目的重复列表。相比Repeater多了两个模板分别为SelectedItemTemplateEditltemTemplate

repeater控件在使用时不能右键编辑模板的,datalist控件可以

SelectedItemTemplate  获取或设置控件中选中项的模板

EditltemTemplate 获取或设置 DataList控件中为进行编辑而选定的项的模板

DataList实现分页与Repeater控件一样(代码同上)

实现DataList或Repeater控件的分页显示有几种方法:

 1、写一个方法或存储过程,根据传入的页数返回需要显示的数据表(DataTable)

 2、使用PagedDataSource类(位于System.Web.UI.WebControls命名空间里)

 

GridView控件

            

    GridView控件是Asp.Net2003中DataGrid控件的升级版本,它提供了比DataGrid更强大的功能,同时比DataGrid更加易用。

     GridView控件是一个功能强大的控件。它可以使用数据绑定技术,在数据初始化的时候绑定一个数据源,从而显示数据。除了能够显示数据外,还可以实现编辑、排序和分页等功能,而这些功能的实现有时可以不写代码或写很少的代码。

实现分页:

html代码:

<asp:GridViewID="GridView1" runat="server"AllowPaging="True"         onpageindexchanging="GridView1_PageIndexChanging" PageSize="3">     </asp:GridView> 

 public class DB    {        public static SqlConnection createCon()        {            return newSqlConnection("server=.;database=Department;uid=sa;pwd=123456");        }    }  protected void Page_Load(object sender,EventArgs e)        {            SqlDataAdapter sda = newSqlDataAdapter();            SqlConnection con = DB.createCon();            SqlCommand cmd = new SqlCommand();            string sqlStr = "select * fromemp";            sda.SelectCommand = newSqlCommand(sqlStr, con);            DataSet ds = new DataSet();            sda.Fill(ds, "employee");            GridView1.DataSource =ds.Tables["employee"].DefaultView;            GridView1.DataBind();        }              protected voidGridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)        {            GridView1.PageIndex =e.NewPageIndex;                                   //绑定            SqlDataAdapter sda = newSqlDataAdapter();            SqlConnection con = DB.createCon();            sda.SelectCommand = newSqlCommand("select * from emp", con);                    DataSet ds = new DataSet();            sda.Fill(ds, "employee");            GridView1.DataSource = ds;            GridView1.DataBind();        }
 

当然如果您正使用SqlDataSource 控件,并将其 DataSourceMode 属性设置为DataReader,则 GridView 控件无法实现分页。

 

   数据行的选定:   

 //鼠标移动到哪行,哪行的背景色改变。   protected voidGridView1_RowDataBound1(object sender, GridViewRowEventArgs e)       {           if (e.Row.RowType ==DataControlRowType.DataRow)           {              e.Row.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#ffcc33'");              e.Row.Attributes.Add("onmouseout","this.style.backgroundColor=c;");           }       }


3,用户控件


用户控件:它是一小段页面,可以包括静态HTML 代码和 Web 服务器控件。用户控件的好处是一旦创建了它,就可以在同一个 Web 应用程序的多个页面重用它。用户控件可以加入自己的属性,事件和方法。

        一个web用户控件与一个完整的web窗体页相似,只是用户控件的扩展名为.ascx,且用户控件中不包含<html>,<body><form>元素

 创建步骤:

-创建一个web项目

-在“项目”菜单中单击“添加web用户控件”

-将文本和控件添加到设计图面

-希望能够以编程方式访问的所有控件都必须是web窗体服务器控件或html服务器控件

-使用web窗体设计器设置属性并创建控件所需的任何代码

 

举例:用户控件 

private string newTypeID;        public string NewTypeID        {            set { this.newTypeID = value; }        }        protected void Page_Load(object sender,EventArgs e)        {            if (!this.IsPostBack )            {                SqlConnection con =DB.createCon();                              SqlCommand cmd = newSqlCommand("select newsTypeName from newsType where newsTypeID='" +this.newTypeID  + "'", con);                con.Open();                string newTypeName =Convert.ToString(cmd.ExecuteScalar());                this.Label1.Text = newTypeName;                cmd.CommandText = "select* from newsMaster where newsTypeID='" + this.newTypeID + "'";                this.GridView1.DataSource =cmd.ExecuteReader();                this.GridView1.DataBind();            }        }

html代码中给出标题NewTypeID

<tdalign="center" class="style4">             <uc2:NewsID="News1" runat="server"NewTypeID="NT10001"/>         </td>



作者:hejingyuan6 发表于2013-6-26 19:16:51 原文链接
阅读:516 评论:19 查看评论
 [原]配置应用程序

配置文件的特点:


1,以纯文本格式存储,使用XML编写

2,如果对文件进行修改,无需重新启动服务器

3,每个目录可以有其自己的文件,并且将重写先前的配置文件

 

配置文件的类型:


1Machine.Config

应用到驻留在服务器上的所有应用程序,每个计算机上仅可以有一个Machine.Config

2Web.Config

应用到驻留在服务器上的单个应用程序,web应用程序的每个目录仅可以有一个此文件。

 

1,所有的配置都必须放在<configuration></configuration>标记中

2<appSetting></appSetting>之间是自定义配置,通常用来设置一些常量

3<system.web></system.web>之间的标记是关于整个应用程序的设置

4<location></location>是一个区域标记

2,3,4是平行的关系

 

Web.Config


1,XML文档(区分大小写)

2,根元素为configuration

 

对应用程序整体的配置放在system.web

pages buffer="true"是否启用对客户端的缓冲

enableViewState="false"是否保存客户端的设置

 

appSetting--自定义配置

 

<appSettings >    <add key ="connStr" value="server=192.168.24.86;database=recharge;uid=sa;pwd=123456"/>  </appSettings>

ImportsSystem.ConfigurationPrivate FunctionGetConn() As SqlClient.SqlConnection             '数据库连接语句               Dim connStr As String =ConfigurationManager.AppSettings("connStr")            'Dim connStr As String =ConfigurationManager.ConnectionStrings("connStr").ConnectionString            'conn = NewSqlClient.SqlConnection("server=192.168.24.86;database=charge;uid=sa;pwd=123456")            conn = NewSqlClient.SqlConnection(connStr)            Return conn         End Function 

customErrors设置--自定义错误

 

 <system.web >    <customErrorsdefaultRedirect="error.aspx"mode="RemoteOnly"></customErrors>  </system.web>

on”始终显示自定义(友好的)信息

off”始终显示详细的ASP.NET错误信息

RemoteOnly”只对不在本地web服务器上运行的用户显示自定义(友好的)信息,出于安全目的,建议使用此设置,以便不向远程客户端显示应用程序的详细信息

 

 

身份验证和授权

 

身份验证的模式为"Windows","Forms","Passport""None"

"None"不执行身份验证。

"Windows"IIS根据应用程序的设置执行身份验证,在IIS中必须禁用匿名访问。默认方式是Windows验证

"Forms"为用户提供一个输入凭据的自定义窗体(web页),然后在应用程序中验证他们的身份。用户凭据标记存储在Cookie中。

"Passport"身份验证是通过Microsoft的集中身份验证服务执行的,它为成员站点提供单独登录和核心配置文件服务

 

Forms认证

 

forms认证,要禁用匿名身份验证

                      


<system.web >    <authenticationmode="Forms">      <forms name ="autoWeb"loginUrl ="login.aspx" protection ="All "></forms>    </authentication>     <authorization >      <allow users="*"/>    </authorization>  </system.web>


    授权:此节设置应用程序的授权策略.可以允许或拒绝不同的用户或角色访问应用程序资源.通配符:"*"表示任何人,"?"表示匿名(未经身份验证的)用户.


<forms>标记的属性


 

 总结:

     Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
    在运行时对Web.config文件的修改不需要重启服务就可以生效(注: 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。



 

作者:hejingyuan6 发表于2013-6-19 10:46:26 原文链接
阅读:413 评论:14 查看评论
 [原]ASP.NET的内置对象


Request


    该对象用于检索从浏览器向服务器所发送的请求中的信息。在按下“提交”按钮时,Request对象将读取和提取通过HTTP请求发送的参数。在用户提交表单时,包含在输入控件中的数据将与表单一起被发送。

    当向服务器提交数据时,分为两种方式:

    Get提交:

//get            string userName = Request.QueryString["txtUserName"].ToString();            string userPwd = Request.QueryString["txtUserPwd"].ToString();            Response.Write("登录的用户名为" + "userName ");

  Post提交:

//post            string userName = Request["txtUserName"].ToString();            string userPwd = Request["txtUserPwd"].ToString();            string userName = Request.Form.Get("txtUserName").ToString();            string userPwd = Request.Form.Get("txtUserPwd").ToString();

PostGet的不同:


         1,Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。 

    比如你有一个页面index.html,这个页面有一个文本域,名称是:a,值是123,你用get提交后,你的url会变成:index.html?a=123,在获取的时候,就是从浏览器中回去参数了,而不是表单!

         2,Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。 

         3,Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post。 

         4Get是Form的默认方法。


Response


    主要用于服务器端向客户端发送数据,其中可以利用Response.Write直接向客户发送信息,也可以利用response.Redirect进行重新定位客户端到另一个URL上去,当然也可以利用Response.Cookies来设置Cookies的值。


Response和Request区别:

    

Application


    此对象用于共享应用程序级信息。即,维护整个应用程序的一组变量,这些变量可以由所有访问该应用程序的用户共享。

    使用Application对象来使整个ASP应用程序的所有用户共享数据,把一个ASP程序中的不同用户、不同页面联系在一起


Session


    该对象用于存储在多个页面调用之间特定用户的信息。存储访问者的用户信息,多个页面可以访问该信息,但是两个访问者之间不能共享该信息。

    每个用户以这台web服务器建立连接时,他就创建链接,并与这个服务器建立了一个session,并且服务器就自动为其分配一个sessionID,用以识别这个用户的唯一身份。特别说明的是Session对象的变量只是对一个用户有效,不同的用户的会话信息用不同的Session对象的变量存储。在网络环境下Session对象的变量是有生命周期的,如果在规定的时间没有对Session对象的变量刷新,系统会终止这些变量。


Server


    该对象用于访问服务器上的资源。来获取你现在请求的那个服务器中的一些信息。例如:访问服务器上创建和安装的组件。

    

//单击加载,上传服务器 protected void btnLoad_Click(object sender, EventArgs e)        {            this.FileUpload1.PostedFile.SaveAs(Server.MapPath("upFile") + "\\1.jpg");            this.Image1.ImageUrl = Server.MapPath("upFile") + "\\1.jpg";        }

Cookie:


   在Web程序设计中,它表示一个长度不超过4K的一个普通的文本文件。这个文件在用户的硬盘上,可以由Web浏览器进行访问。由WEB服务器嵌入用户浏览器中,以便标识用户,且随同每次用户请求发往WEB服务器。这样可以让服务器识别是哪个用户。


Global.asa文件:


   用来存储事件信息和由应用程序全局使用的对象。global.asa是ASP的一个全局应用文件.主要是定义Session对象和Application对象,以及相应的事件.

   Session对象和Application对象都有两个事件,要使用他们的事件,就必须首先在Global.asa文件文件中声明,该文件对于用户来说是不可见的,文件名也是固定的,并且该文件还必须放在应用程序的根目录下,每个应用程序只能拥有一个Global.asa文件.

 

举例:查看在线人数,在global.asa中编写


 public class Global : HttpApplication    {        void Application_Start(object sender, EventArgs e)        {            // 在应用程序启动时运行的代码            BundleConfig.RegisterBundles(BundleTable.Bundles);            AuthConfig.RegisterOpenAuth();            Application.Add("count", 0);            Application["online"] = 0;        }        void Application_End(object sender, EventArgs e)        {            //  在应用程序关闭时运行的代码        }        void Application_Error(object sender, EventArgs e)        {            // 在出现未处理的错误时运行的代码        }        void Session_Start(object sender, EventArgs e)        {            Session.Timeout = 1;            Application.Lock();            Application["count"] = (int)Application["count"] + 1;            Application["online"] = (int) Application["online"] +1;            Application.UnLock();        }        void Session_End(object sender, EventArgs e)        {            Application.Lock();            Application["online"] = (int)Application["online"] - 1;            Application.UnLock();        }            }

在web应用程序中编写:

  protected void Page_Load(object sender, EventArgs e)        {                 Response.Write(Application["count"].ToString());           }


   以上这些对象提供了相当多的功能,但是不同的对象的应用场合不同,这需要我们加深理解,在以后的实践中应用。

GongshangLogo
原创粉丝点击