zoukankan      html  css  js  c++  java
  • WebForm页面数据绑定总结

     总述

    绑定语法

    第一种: <%= str%>

    例子:'<%= DateTime.Now %>'
    适用条件:用于非服务器端控件的属性

    第二种: <%= str%>

    从出现的位置来看,除了能出现在第一种代码块出现的所有位置外,他还可以出现在服务器端控件的属性中。

    从绑定的变量类型上看,他还可以配合ASP.NET的数据绑定类控件,来绑定上述的第四种“变量”类型,就是数据集合(DropDownList,DataList,DataGrid,ListBox这些是数据绑定类控件,数据集合包括ArrayList(数组),Hashtable(哈稀表,DataView(数据视图),DataReader等)。

    用法上看,在前台代码中除了在相应位置写上<%# %>外,在后台代码中,还需要使用DataBind()方法

    前台绑定位置

    一般来说,在前台代码的三种位置可能会用到(绑定)后台变量:

    1. 服务器端控件属性或HTML标签属性
    2. JavaScript代码中
    3. Html显示内容的位置(也就是开始标签与结束标签之间的内容,如<div>这里</div>(Html标签)或者<asp:Label ID="Label2" runat="server" Text="Label">这里</asp:Label>(服务器端控件),它作为占位符把变量显示于符号出现的位置)
    第一种控件和HTML标签属性绑定

    属性值绑定必须满足属性值约束:

    属性值不能是常量。比如服务器控件Runat必须是"server"

    属性值数据类型必须正确

    第二种 javascript函数变量的绑定

    一般只要绑定的后台变量和JavaScript中数据类型兼容即可

    第三种 内容绑定

    服务器控件内容的绑定

    (1)约束型控件:这类控件要求它的开始标签和结束标签中只能包含指定的子控件,因此如果在这里出现代码块,将编译错误。例如:

    <asp:DataList runat="server"></asp:DataList>,在它之间,要求必须嵌套<ItemTemplate></ItemTemplate>。

    (2)非嵌套类控件:这类控件,不允许在内部嵌套其他控件或标签,只能是常量字符串,它会将开始标签和结束标签中常量字符串内容作为他的属性。例如上面提到的TextBox,它会将标签间内容作为它的Text属性值。

    (3)嵌套类控件:这类控件,可以嵌套其他任意控件,也可以包含字符串,因此可以正常显示绑定代码块所表示的字符串内容。例如Label控件、Panel等。

    (4)数据绑定类控件:这类控件是ASP.NET提供的服务器端控件,除了可以绑定普通的变量类型,也可以绑定一个数据集合(只能采取下面的第二种方式实现)。

    后台可绑定变量

    • 成员变量
    • 方法或属性的返回值
    • 表达式,也就是所有后台能够执行的代码,运行后所得到的值(也就是直接将后台代码写在前台代码中,记得使用完全限定名或在后台中using相关namespace)
    • 数据集合
    后台变量条件

    (1)变量修饰符要求。变量是静态或者实例字段均可。对于代码隐藏模式的ASP.NET,以上的所述的变量必须为public或protected类型(因为是基类与派生类的关系),private或者internal都不行,而代码嵌入模式则任何修饰符的变量均可访问(一个类内部的关系)。

    (2)变量类型要求。由于前台属性一般是字符串类型,而JavaScript基本类型也就是字符串型、数字型、布尔型,因此对应的变量应该也是这几种方式,其余类型如果不被支持(如复杂类型、数组、引用类型等),前台获取的就是调用了变量的ToString()方法所得到的字符串。因此,在绑定时,要根据情况看是否能进行隐式类型转换,必要时还要用相关函数来强制转换,以保证前台可以获得正确的值。当然,对于数据绑定类控件,它的有些属性可以为数据集合,但这时的绑定只能通过下面第二种方式才被支持。


    1.绑定样式
    前台绑定片段
    <span style='<%#ConvertColor(Eval("PA_STATUS").ToString())%>'><%#Eval("PA_STATUS")%></span></div></td>

    后台方法片段

    protected string ConvertColor(string status)
            {
                int value = int.Parse(status);
                switch (value)
                {
                    case 0:
                        return "color:black";
    
                    case 1:
                        return "color:green";
    
                    case 2:
                        return "color:red";
                    default:
                        return "";
    
                }
    
            }

    2.绑定后台定义的方法
    前台绑定片段
     <td><div><span ><%#ConvertStatus(Eval("PA_STATUS").ToString())%></span></div></td>

    后台定义的方法

    protected string ConvertStatus(string status)
            {
                int value = int.Parse(status);
                switch (value)
                { 
                    case 0:
                        return "待处理";
                     
                    case 1:
                        return "处理成功";
                      
                    case 2:
                        return "处理失败";
                    default:
                        return "";
    
                }
            
            }
    如何绑定多个变量
       <asp:LinkButton ID="lbtnID" runat="server" CausesValidation="False" CommandName="Status" CommandArgument='<%#Eval("ID")+","+Eval("Status")+","+Eval("TypeID")%>' Style="color: #0063dc;" ><span ><%#Eval("Status").ToString() == "0" ? "未审核" : "撤销审核"%></span></asp:LinkButton>

     资料来源:

     http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 



  • 相关阅读:
    《Redis 设计与实现》读书笔记(四)
    《Redis 设计与实现》读书笔记(三)
    《Redis 设计与实现》读书笔记(二)
    《Redis 设计与实现》读书笔记(一)
    《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)
    Python调试工具
    记一次偶发的bug排查——redis-py-cluster库的bug
    苹果支付的这些漏洞,你都堵上了吗?
    微软消息队列-MicroSoft Message Queue(MSMQ)队列的C#使用
    Quartz.net设置任务中同时最多运行一个实例 [DisallowConcurrentExecution]
  • 原文地址:https://www.cnblogs.com/sunxi/p/3643141.html
Copyright © 2011-2022 走看看