• B/S一些小知识及常用控件


    一: B/S网页的运行

    页面在设计的时候,本身就是一个类。在运行的时间,是一个对象。

    其中aspx和aspx.cs是在同一个类下。

    aspx是主要是负责界面,而aspx.cs主要是负责数据逻辑。

    呈现:把页面上所有的控件对象,转化成HTML标签。  内存中的对象--->HTML

    ** 规范 **:

    以后写代码的时候,在Page_Load方法中,99%的代码需要写在

      if (!IsPostBack)
    
      {
    
      }

    IsPostBack——页面初始加载-false;表单提交加载-true

    页面初始加载的情况:

    1.地址栏中输入地址打开。

    2.用超链接链到这个页面,或者代码 Response.Redirect()转过来的页面。

    3.点击刷新按钮重新刷新。

    1. 三个常用语句:

    Response :响应    从服务端--客户端

            Write("字符串"):向客户端页面输出一段文字,写出来的字符串在页面最上。

            Redirect("URL"):重定向,一般用来转页面

            End():结束向客户端的输出

     

    Request:请求    从客户端--服务端

            Request["名"]:获取客户端用post或get方式传递过来的数据。

            Request.Form["名"]:获取客户端用post方式传递过来的数据。

            Request.QueryString["名"]:获取客户端用get方式传递过来的数据。

     

    Session :会话——用来保存访问者状态。 一个会话中保存状态,这个状态只在这个会话中可用。

    HTTP :无状态协议

    例子:登录成功纪录下状态

      Session["uid"] = txtUID.Text;//登录的时候用Session纪录下登录者的UID,然后再跳转页面。
    
      Session["uid"].ToString();//之后的界面可以这样取出登录者UID

    2. 防止跳过登录界面进入其他界面:

    (1)在其他界面的Load里面写代码,判断是否登录;

      if (Session["uid"] == null)
        {
            Response.Redirect("Default.aspx");
        }

    (2)做一个PageBase类派生自System.Web.UI.Page类,其他页面都派生自这个类,在这个类里重写OnLoad函数:

    protected override void OnLoad(EventArgs e)
        {
            if (Session["uid"] == null)
    
            {
                Response.Redirect("Default.aspx");
            }
            base.OnLoad(e);
    }

    这样在加载每一个其他页面的时候都会事先判断一下是否登录,如果未登录则转向登录界面。

     

    二: B/S常用控件:

    1.1  Label 控件

    父类WebControl,在呈现的时候,两边会呈现为span标签。

     属性:

       Width: (Unit)可设为像素,也可设为百分比

       Height: (Unit)可设为像素,也可设为百分比

       BackColor:(Color )设置背景颜色

       ForeColor:(Color )设置前景色

       BorderColor:(Color )设置边框颜色

       BorderWidth:(Unit) 设置边框宽度

       BorderStyle:(BorderStyle )设置边框样式

      字体属性Font,包含下面一些属性:

        Bold 加粗

        Italic 倾斜

        UnderLine 下划线

        OverLine 上划线

        StrikeOut 删除线

        Name: 字体

        Size: 大小

    CssClass :  样式表的class名,多个控件可以设置为一个Class名,样式表添加样式方便

    Text:标签上的文字

    ToolTip : 鼠标放上去的气泡信息。

    Enable:是否可用

    Visible:是否可见

    1.2  Literal也是一个标签:

         在呈现的时候,两边不会出现span标签。

    2、TextBox控件:

    拥有Label的所有属性。

        TextMode:文本框的呈现模式SingleLine-单行文本框,MultiLine-多行文本框,Password-密码框

        Rows:行数。只有TextMode=MultiLine时候起作用。

        Columns:列数,控制长度。

        Wrap:是否自动换行。

        MaxLength:最多输入多少个字符。只有TextMode=SingleLine/Password时起作用。

        ReadOnly:只读

    3、 Button 控件

    LinkButton 超链接模样的按钮

    ImageButton 图片模样的按钮(ImageUrl属性):

    它们三个按钮拥有Label的所有属性。

     OnClientClick:按钮点击的时候,要执行的客户端脚本。如果说设置了此属性,在HTML代码中又添加了OnClick,则两个都执行。

    例子:如何给控件加上JS 的脚本调用?

    法一:直接在源代码中加上相应的JS事件,及脚本调用。

    <asp:TextBox onblur="checkEmail()" ID="TextBox3" runat="server"></asp:TextBox>

    法二:在Page_Load事件中,通过控件的Attributes属性加入相应的JS事件及脚本调用。  

     protected void Page_Load(object sender, EventArgs e)
         {
            TextBox3.Attributes.Add("onblur","return checkEmail()");
         }

    法三:像按钮,它直接带有OnClientClick的脚本调用属性。

    4、HyperLink超链接

    拥有Label的所有属性。

        Text:超链接的文本

        NavigateUrl:超链接的地址,相当于href

        Target:超链接打开的位置

        ImageUrl:图片地址。如果设置此属性,则超链接会变成图片超链接,否则是文字超链接。

    5、Image控件

    拥有Label的所有属性。

    ImageUrl:图片的地址

    6、RadioButton控件:单选按钮

    拥有Label的所有属性。

    Text:文本

    Checked:bool,是否被选中

    GroupName:组名,将来被呈现为<input type=radio>中的name属性,设为一组。

    7、CheckBox控件:复选框

    拥有Label的所有属性。

        Text:文本

        Checked:bool,是否被选中

    8、DropDownList下拉列表      //相似的控件ListBox,CheckBoxList,RadioButtonList

    拥有Label的所有属性。

        (一)把数据填进去

        1.在界面中,手动一项项添加

        2.用代码逐项添加

           ListItem li = new ListItem("深圳","0755");
           DropDownList1.Items.Add(li);

        3.绑定

            MyDBDataContext context = new MyDBDataContext();
            var query = context.ChinaStates.Where(p=>p.ParentAreaCode == "37");
            DropDownList1.DataSource = query;
            DropDownList1.DataTextField = "AreaName";
            DropDownList1.DataValueField = "AreaCode";
            DropDownList1.DataBind();

          默认情况下,在绑定的时候,会把原有的内容给清空.

        (二)把选中的数据取出来

        Literal1.Text = DropDownList1.SelectedValue;
        Literal1.Text = DropDownList1.SelectedItem.Text + DropDownList1.SelectedItem.Value;
        int n = DropDownList1.SelectedIndex;
        Literal1.Text = DropDownList1.Items[n].Text + DropDownList1.Items[n].Value;

        (三)设定某一项的选中状态

        为下拉列表的SelectedIndex或SelectedValue属性赋值。

        DropDownList1.SelectedIndex = Convert.ToInt32(TextBox1.Text);
        DropDownList1.SelectedValue = TextBox2.Text;

    属性:

    Items:所有子项的集合

    DataSource:数据源

    DataTextField: 设置要显示的文字是哪个属性(字段)

    DataValueField: 设置Value值是哪个属性(字段)

    AppendDataboundItems:是否追加数据绑定项。true-绑定的时候,不清空原有的内容。false-绑定的进候,清空源有的内容。

    SelectedIndex 选中项的索引

    SelectedValue 选中项的值

    SelectedItem 选中项

    方法:

    DataBind();//绑定数据

    ­

    例子(1):同意不同意控制按钮的可用

    用两个RadioButton,不同意默认选中。

    <asp:RadioButton ID="RadioButton1" onclick="tongyi()" runat="server" GroupName="aaa" Text="同意" />
    <asp:RadioButton ID="RadioButton2" onclick="tongyi()" runat="server" Checked="True" GroupName="aaa" Text="不同意" />
    <asp:Button ID="Button1" runat="server" Enabled="False" Text="下一步" />   

    方式一:JS脚本:

           function tongyi() 
           {
                var btn = document.getElementById("Button1");
                var rd = document.getElementById("RadioButton1");
                if (rd.checked == true)
                {
                    btn.disabled = false;
                }
                else {
                    btn.disabled = true;
                }
            }

    方式二:用C#语句来判断,需要设置RadioButton的AutoPostBack为True

        protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (RadioButton1.Checked)
            {
                Button1.Enabled = true;
            }
            else
            {
                Button1.Enabled = false;
            }
        }

    9、ListBox——显示多个,选择多个。

         Items 项

        DataSource 数据源

        DataTextField 设置要显示的文字是哪个属性(字段)

        DataValueField 设置Value值是哪个属性(字段)

        SelectedValue 选中项的值

        SelectedItem 选中项

        SelectedIndex 选中项的索引

        AppendDataboudItem 是否追加数据绑定项。true-绑定的时候,不清空原有的内容。false-绑定的进候,清空源有的内容。

        SelectionMode:Single-单选;Multiple-多选

     

        获取选中项的值,多选的情况下需要遍历所有的项:

      foreach (ListItem li in ListBox1.Items)
        {
            if (li.Selected)
            {
                Literal1.Text += li.Value;
            }
        }

    10、RadioButtonList——显示多个,选择1个。布局。

        Items 项

        DataSource 数据源

        DataTextField 设置要显示的文字是哪个属性(字段)

        DataValueField 设置Value值是哪个属性(字段)

        SelectedValue 选中项的值

        SelectedItem 选中项

        SelectedIndex 选中项的索引

        AppendDataboudItem 是否追加数据绑定项。true-绑定的时候,不清空原有的内容。false-绑定的进候,清空源有的内容。

        RepeatLayout:Table-用表格布局;Flow-用span布局。

        RepeatColumns:一行显示几个。

        RepeatDirection:布局方向。

    11、CheckBoxList——显示多个,选择多个。布局。

        Items 项

        DataSource 数据源

        DataTextField 设置要显示的文字是哪个属性(字段)

        DataValueField 设置Value值是哪个属性(字段)

        SelectedValue 选中项的值

        SelectedItem 选中项

        SelectedIndex 选中项的索引

        AppendDataboudItem 是否追加数据绑定项。true-绑定的时候,不清空原有的内容。false-绑定的进候,清空源有的内容。

        RepeatLayout:Table-用表格布局;Flow-用span布局。

        RepeatColumns:一行显示几个。

        RepeatDirection:布局方向。

        获取选中项的值,多选的时候遍历所有项找选中的值:

        foreach (ListItem li in CheckBoxList1.Items)
            {
                if (li.Selected)
                {
                   Literal1.Text += li.Value;
                }
            }

        设置那一项被选中:

        CheckBoxList1.SelectedIndex = -1;//清除原有状态。
            //设置选中状态。
            string s = TextBox1.Text;
            string[] spliters = s.Split('/');
            foreach(string key in spliters)
            {
                foreach (ListItem li in CheckBoxList1.Items)
                {
                    if (li.Value == key)
                    {
                        li.Selected = true;
                    }
                }
            }

    三: 三个案例:

    案例一:添加员工

    两段代码:

    1.初始化民族下拉列表的代码。 

     protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InfoDataContext context = new InfoDataContext();
                var query = context.Nation;
                //清空
                ddNation.Items.Clear();
                foreach(Nation data in query)
                {
                    //造项,非绑定的方式
                    ListItem item = new ListItem();
                    item.Text = data.Name;
                    item.Value = data.Code;
                    //添加
                    ddNation.Items.Add(item);
                }
            }
        }

    2.添加按钮,向数据库添加数据的代码。

      protected void btnAdd_Click(object sender, EventArgs e)
        {
            //取数据
            string code = txtCode.Text;
            string name = txtName.Text;
            bool sex = Convert.ToBoolean( radSex.SelectedValue);
            string nation = ddNation.SelectedValue;
            DateTime birthday = Convert.ToDateTime( txtBirthday.Text);
            InfoDataContext context = new InfoDataContext();
            //造添加对象
            Info data = new Info();
            data.Code = code;
            data.Name = name;
            data.Sex = sex;
            data.Nation = nation;
            data.Birthday = birthday;
            //添加提交
            context.Info.InsertOnSubmit(data);
            context.SubmitChanges();
            //清空函数
            TxtClear();
        }

    案例二:三级联动

    1.三个下拉列表填充数据的三个函数

     //上下文对象
        ChinaDataContext context = new ChinaDataContext();
        //省份加载函数
        protected void ShengLoad()
        {
            var sheng = context.ChinaStates.Where(p=>p.ParentAreaCode=="0001");
            ddSheng.DataSource = sheng;
            ddSheng.DataTextField = "AreaName";
            ddSheng.DataValueField = "AreaCode";
            ddSheng.DataBind();
        }
        //地市加载函数
        protected void ShiLoad()
        {
            var shi = context.ChinaStates.Where(p => p.ParentAreaCode == ddSheng.SelectedValue);
            ddShi.DataSource = shi;
            ddShi.DataTextField = "AreaName";
            ddShi.DataValueField = "AreaCode";
            ddShi.DataBind();
        }
        //区县加载函数
        protected void QuLoad()
        {
            var qu = context.ChinaStates.Where(p => p.ParentAreaCode == ddShi.SelectedValue);
            ddQu.DataSource = qu;
            ddQu.DataTextField = "AreaName";
            ddQu.DataValueField = "AreaCode";
            ddQu.DataBind();
        }

    2.在Page_Load中调用三个函数

     protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ShengLoad();
                ShiLoad();
                QuLoad();
            }
        }

    3.在前两个下拉列表的Change事件中(双击进去的事件)填充相关联的下拉列表。

      protected void ddSheng_SelectedIndexChanged(object sender, EventArgs e)
        {
            ShiLoad();
            QuLoad();
        }
        protected void ddShi_SelectedIndexChanged(object sender, EventArgs e)
        {
            QuLoad();
        }

    4.记得把前两个下拉列表的AutoPostBack属性设为True。自动提交。

    案例三:修改员工

    三段代码:

    1.初始化民族下拉列表的代码,Load里面写。

      protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InfoDataContext context = new InfoDataContext();
                var query = context.Nation;
                //绑定显示
                ddNation.DataSource = query;
                ddNation.DataTextField = "Name";
                ddNation.DataValueField = "Code";
                ddNation.DataBind();
            }
        }

    2.根据传过来人员主键,查询并向页面加载人员信息的代码,Load里面写。

                //找出该代号的人员信息显示出来
                string code = Request["code"].ToString();
                var info = context.Info.Where(p=>p.Code==code);
                if (info.Count() > 0)
                {
                    Info data = info.First();
                    txtCode.Text = data.Code;
                    txtName.Text = data.Name;
                    radSex.SelectedValue = data.Sex.Value.ToString();
                    ddNation.SelectedValue = data.Nation;
                    txtBirthday.Text = data.Birthday.Value.ToString("yyyy年MM月dd日");
                }

    以上两段代码都要在Page_Load中执行

    3.修改按钮,向数据库修改数据的代码。

       protected void btnUpdata_Click(object sender, EventArgs e)
        {
            //找到该人员的信息
            InfoDataContext context = new InfoDataContext();
            string code = txtCode.Text;
            var info = context.Info.Where(p => p.Code == code);
            if (info.Count() > 0)
            {
                Info data = info.First();
                //修改字段
                data.Name = txtName.Text;
                data.Sex = Convert.ToBoolean(radSex.SelectedValue);
                data.Nation = ddNation.SelectedValue;
                data.Birthday= Convert.ToDateTime(txtBirthday.Text);
                //提交
                context.SubmitChanges();
            }
            //返回
            Response.Redirect("InfoList.aspx");
        }

     

     

     

  • 相关阅读:
    CSS3--5.颜色属性
    CSS3---4.伪元素选择器
    CSS3---3.相对父元素的伪类
    CSS3---2.兄弟选择器(准确来说叫弟弟选择器,只能向下选)
    CSS3---简介与现状
    CSS3---1.属性选择器
    HTML5---22.LocalStorage的应用
    HTML5---21.SessionStorage的应用
    HTML5---19.地理定位的接口使用
    一首新裤子歌曲
  • 原文地址:https://www.cnblogs.com/Alvin-ftd/p/4154217.html
Copyright © 2020-2023  润新知