月度归档:1999年11月

ASP.NET Master Page改变内容页title方法

在定义好母版页以后,有时我们需要改变网页的标题但是如果直接在母版页中更改title属性又会导致其他的内容页出现相同的title情况,VS2008中提供了母版页的新功能。

1.通过内容页中的Page指令中Title属性改变内容页title:

<%@ Page Language=”C#” MasterPageFile=”~/MyMaster.master” Title=”My Title” %>

2.通过编程改变:前提是标志必须是运行在服务器端,即要给它加上runat=”server”属性

void Page_Load()
{
//……
Page.Header.Title="My Title";
//……
}

3.通过内容页的head占位符控件,在VS2008中添加的母版页会在头部有如下按商品asp:ContentPlaceHolder控件(把母版页的title标签拖到该控件内)

<asp:ContentPlaceHolder id="head" runat="server">
<title>无标题页</title>
</asp:ContentPlaceHolder>

而内容页往往会添加一个对应的asp:Content控件,只需要改变其中的title标签内容即可


无标题页

aspx使用ajax调用服务器方法

Page Method 方式
如果不想独立创建Web Service,而只是希望能够调用页面上的一些方法,那么可以采用Page Method的的方法。同样的我们添加一个页面PageMethodDemo.aspx,增加一些JavaScript和一个后台方法,注意这个方法必须 是静态方法,代码如下:

<script type="text/javascript">
function PageMethodCall()
{
    var testString = "PageMethodCall";
    PageMethods.Test($get('txtName').value, OnSucceeded);
}
// 页面方法调用完成的回调函数.
function OnSucceeded(result)
{
    // 显示调用结果
    var RsltElem = document.getElementById("Results");
    RsltElem.innerHTML = result;
}
</script>
<form id="form1">
    <h2>Page Method</h2>
    <input id="txtName" type="text" />
    <button id="Button1">调用Page Method</button>
</form>

代码页PageMethodDemo.aspx.cs

[System.Web.Services.WebMethod]
public static string Test(string name)
{
    return "Hello " + name + "!";
}

NHibernate查询语言(HQL)

NHibernate中的查询方法

在NHibernate中提供了三种查询方式给我们选择:NHibernate查询语言(HQL,NHibernate Query Language)、条件查询(Criteria API,Query By Example(QBE)是Criteria API的一种特殊情况)、原生SQL(Literal SQL,T-SQL、PL/SQL)。每个人有不同的喜好和特长,可以根据自己的情况选择使用其中的一种或几种。这一节我们介绍NHibernate查询 语言(HQL,NHibernate Query Language)。

NHibernate查询语言(HQL)

NHibernate查询语言(HQL,NHibernate Query Language)是NHibernate特有的基于面向对象的SQL查询语言,它具有继承、多态和关联等特性。实际上是用OOP中的对象和属性映射了数据库中的表和列。
例如这一句:select c.Firstname from Customer c
Customer是数据库表,Firstname是列;而对于HQL:Customer是一个对象,Firstname是Customer对象的属性。相比之下SQL语句非常灵活,但是没有编译时语法验证支持。
本节介绍基础语法:from子句,select子句,where子句,order by子句,group by子句并分别举出可以运行的实例。至于关联和连接,多态(polymorphism)查询,子查询在以后具体实例中学习。注意:HQL不区分大小写。
注意:由于篇幅有限,我在这里仅仅贴出了数据访问层的代码,就是在业务逻辑层可以直接调用的方法。测试这些方法的代码就没有贴出来了,你可以下载本 系列的 源代码仔细看看测试这些方法的代码。这节,我们在上一节源代码的基础上,在数据访问层中新建QueryHQL.cs类用于编写HQL查询方法,在数据访问 的测试层新建一QueryHQLFixture.cs类用于测试。

1.from子句

顾名思义,同SQL语句类似:
1.简单用法:返回表中所有数据。

public IList From()
{
 //返回所有Customer类的实例
 return _session.CreateQuery("from Customer")
        .List();
}

2.使用别名:使用as来赋予表的别名,as可以省略。


public IList FromAlias()
{
  //返回所有Customer类的实例,Customer赋予了别名customer
  return _session.CreateQuery("from Customer as customer")
  .List();
}

3.笛卡尔积:出现多个类,或者分别使用别名,返回笛卡尔积或者称为“交叉”连接。

2.select子句

1.简单用法:在结果集中返回指定的对象和属性。


public IList Select()
{
  //返回所有Customer的CustomerId
  return _session
    .CreateQuery("select c.CustomerId from Customer c")
    .List();
}

2.数组:用Object[]的数组返回多个对象和/或多个属性,或者使用特殊的elements功能,注意一般要结合group by使用。


public IList SelectObject()
{
  return _session
    .CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
    .List();
}

或者使用类型安全的.NET对象,以后在实例中说明。
3.统计函数:用Object[]的数组返回属性的统计函数的结果,注意统计函数的变量也可以是集合count(elements(c.CustomerId) )


public IList AggregateFunction()
{
  return _session
    .CreateQuery("select avg(c.CustomerId),sum(c.CustomerId),count(c) from Customer c")
    .List();
}

4.Distinct用法:distinct和all关键字的用法和语义与SQL相同。实例:获取不同Customer的FirstName。


public IList Distinct()
{
  return _session
    .CreateQuery("select distinct c.Firstname from Customer c")
    .List();
}

3.where子句

where子句让你缩小你要返回的实例的列表范围。


public IList Where()
{
  return _session
    .CreateQuery("select from Customer c where c.Firstname='YJing'")
    .List();
}

where子句允许出现的表达式包括了在SQL中的大多数情况:

  • 数学操作符:+, -, *, /
  • 真假比较操作符:=, >=, <=, <>, !=, like
  • 逻辑操作符:and, or, not
  • 字符串连接操作符:||
  • SQL标量函数:upper(),lower()
  • 没有前缀的( ):表示分组
  • in, between, is null
  • 位置参数:?
  • 命名参数::name, :start_date, :x1
  • SQL文字:’foo’, 69, ‘1970-01-01 10:00:01.0’
  • 枚举值或常量:Color.Tabby

4.order by子句

按照任何返回的类或者组件的属性排序:asc升序、desc降序。


public IList Orderby()
{
  return _session
    .CreateQuery("select from Customer c order by c.Firstname asc,c.Lastname desc")
    .List();
}

5.group by子句

按照任何返回的类或者组件的属性进行分组。


public IList Groupby()
{
  return _session
    .CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
    .List();
}

实例分析

好的,以上基本的查询的确非常简单,我们还是参考一下实例,分析一下我们如何写HQL查询吧!
实例1:按照FirstName查询顾客:


public IList GetCustomersByFirstname(string firstname)
{
  //写法1
  //return _session
  // .CreateQuery("select from Customer c where c.Firstname='" + firstname + "'")
  // .List();
  //写法2:位置型参数
  //return _session
  // .CreateQuery("select from Customer c where c.Firstname=?")
  // .SetString(0, firstname)
  // .List();
  //写法3:命名型参数(推荐)
  return _session
    .CreateQuery("select from Customer c where c.Firstname=:fn")
    .SetString("fn", firstname)
    .List();
}

书写HQL参数有四种写法:

  • 写法1:可能会引起SQL注入,不要使用。
  • 写法2:ADO.NET风格的?参数,NHibernate的参数从0开始计数。
  • 写法3:命名参数用:name的形式在查询字符串中表示,这时IQuery接口把实际参数绑定到命名参数。
  • 写法4:命名的参数列表,把一些参数添加到一个集合列表中的形式,比如可以查询数据是否在这个集合列表中。

使用命名参数有一些好处:命名参数不依赖于它们在查询字符串中出现的顺序;在同一个查询中可以使用多次;它们的可读性好。所以在书写HQL使用参数的时候推荐命名型参数形式。
测试一下这个方法吧:看看数据库中Firstname为“YJingLee”的记录个数是否是1条,并可以判断查询出来的数据的FirstName属性是不是“YJingLee”。


[Test]
public void GetCustomerByFirstnameTest()
{
  IList customers = _queryHQL.GetCustomersByFirstname("YJingLee");
  Assert.AreEqual(1, customers.Count);
  foreach (var c in customers)
  {
    Assert.AreEqual("YJingLee", c.Firstname);
  }
}

实例2:获取顾客ID大于CustomerId的顾客:


public IList GetCustomersWithCustomerIdGreaterThan(int customerId)
{
  return _session
    .CreateQuery("select from Customer c where c.CustomerId > :cid")
    .SetInt32("cid", customerId)
    .List();
}

jsp分页

<%
  BookBean bs = new BookBean();
  List books=bs.getAllBook();
  BookBean rs=null;
  int pageNo = 0;  //将被显示的页面页码
  int pageSize = 6;  //每页显示的记录条数
  int i = 0;  //将被显示的记录行号
  int totalPage = (books.size()-1)/pageSize;  //总页数
  if(request.getParameter("pageNo")!=null)
    pageNo = Integer.parseInt(request.getParameter("pageNo"));
  if(pageNo!=0)
    i = pageNo*pageSize;
  for(int j=0;i <books.size()&&j <pageSize;i++,j++){
    rs =(BookBean) books.get(i);
    String ISBN = rs.getID();
    %>
    <% if(pageNo!=0){ %>
      <a href="booklist.jsp?pageNo=0">首  页 </a>
      <a href="booklist.jsp?pageNo= <%=pageNo-1%>">上一页 </a>
    <% }
    if(pageNo!=totalPage){
    %>
    <a href="booklist.jsp?pageNo= <%=pageNo+1%>">下一页 </a>
    <a href="booklist.jsp?pageNo= <%=totalPage%>">末  页 </a>
<% } %>

String.Format格式说明

C#格式化数值结果表

字符 说明 示例 输出
C 货币 string.Format("{0:C3}", 2) $2.000
D 十进制 string.Format("{0:D3}", 2) 002
E 科学计数法 1.20E+001 1.20E+001
G 常规 string.Format("{0:G}", 2) 2
N 用分号隔开的数字 string.Format("{0:N}", 250000) 250,000.00
X 十六进制 string.Format("{0:X000}", 12) C
string.Format("{0:000.000}", 12.2) 012.200

Strings

There really isn’t any formatting within a strong, beyond it’s alignment. Alignment works for any argument being printed in a String.Format call.

Sample Generates
String.Format("->{1,10}<-", "Hello"); -> Hello<-
String.Format("->{1,-10}<-", "Hello"); ->Hello <-

Numbers

Basic number formatting specifiers:

Specifier Type Format Output (Passed Double 1.42) Output (Passed Int -12400)
c Currency {0:c} $1.42 -$12,400
d Decimal (Whole number) {0:d} System.FormatException -12400
e Scientific {0:e} 1.420000e+000 -1.240000e+004
f Fixed point {0:f} 1.42 -12400.00
g General {0:g} 1.42 -12400
n Number with commas for thousands {0:n} 1.42 -12,400
r Round trippable {0:r} 1.42 System.FormatException
x Hexadecimal {0:x4} System.FormatException cf90

Custom number formatting:

Specifier Type Example Output (Passed Double 1500.42) Note
0 Zero placeholder {0:00.0000} 1500.4200 Pads with zeroes.
# Digit placeholder {0:(#).##} (1500).42
. Decimal point {0:0.0} 1500.4
, Thousand separator {0:0,0} 1,500 Must be between two zeroes.
,. Number scaling {0:0,.} 2 Comma adjacent to Period scales by 1000.
% Percent {0:0%} 150042% Multiplies by 100, adds % sign.
e Exponent placeholder {0:00e+0} 15e+2 Many exponent formats available.
; Group separator see below  

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system’s regional settings; the example strings here are from my local locale.

Specifier Type Example (Passed System.DateTime.Now)
d Short date 10/12/2002
D Long date December 10, 2002
t Short time 10:11 PM
T Long time 10:11:29 PM
f Full date & time December 10, 2002 10:11 PM
F Full date & time (long) December 10, 2002 10:11:29 PM
g Default date & time 10/12/2002 10:11 PM
G Default date & time (long) 10/12/2002 10:11:29 PM
M Month day pattern December 10
r RFC1123 date string Tue, 10 Dec 2002 22:11:29 GMT
s Sortable date string 2002-12-10T22:11:29
u Universal sortable, local time 2002-12-10 22:13:50Z
U Universal sortable, GMT December 11, 2002 3:13:50 AM
Y Year month pattern December, 2002

The ‘U’ specifier seems broken; that string certainly isn’t sortable.
Custom date formatting:
 

Specifier Type Example Example Output
dd Day {0:dd} 10
ddd Day name {0:ddd} Tue
dddd Full day name {0:dddd} Tuesday
f, ff, … Second fractions {0:fff} 932
gg, … Era {0:gg} A.D.
hh 2 digit hour {0:hh} 10
HH 2 digit hour, 24hr format {0:HH} 22
mm Minute 00-59 {0:mm} 38
MM Month 01-12 {0:MM} 12
MMM Month abbreviation {0:MMM} Dec
MMMM Full month name {0:MMMM} December
ss Seconds 00-59 {0:ss} 46
tt AM or PM {0:tt} PM
yy Year, 2 digits {0:yy} 02
yyyy Year {0:yyyy} 2002
zz Timezone offset, 2 digits {0:zz} -05
zzz Full timezone offset {0:zzz} -05:00
: Separator {0:hh:mm:ss} 10:43:20
/ Separator {0:dd/MM/yyyy} 10/12/2002

Enumerations

 

Specifier Type
g Default (Flag names if available, otherwise decimal)
f Flags always
d Integer always
x Eight digit hex.

Some Useful Examples

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);
This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.
String.Format("{0:(###) ###-####}", 18005551212);
This will output "(800) 555-1212".
 
变量.ToString()
字符型转换 转为字符串

12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

女人的爱情与修养有关

一朋友说:“女人有四种境界:浅而清澈型;浅 而混浊型;深而混浊型;深而清澈型”,其中属第四种境界最高,不禁觉得精辟,索性拿来一谈,其实爱情与品德有关。


浅而清澈型的女人比较可爱,简单且又真 诚,纯粹且又单纯,她们没有太多的欲望,没有太多的奢求,只有一颗面对生活与爱情的真诚的心。既没有太多的城府,也没有太多的计较,虽然没有知性女人的聪 慧,却与其相处犹如童年的梦幻,因为简单,所以快乐。若能遇上这等女人,那便会有一个简单且活泼的生活。


浅而混浊型的女人在这个物欲横流的社会比较常见, 浅是说头脑简单,阅历稀少,浑浊是说欲望颇多,奢望强烈,自己都搞不清楚自己需要什么。这类女人一经接触便很容易了解,由于比较粗浅,言语内外,动静之 间,便把那份浑浊暴露的体无完肤,可悲的是这类女人却还比较自爱,常常把自己的打扮得简单而看起来单纯,且故作纯粹,只是举止之间,总是摆脱不了那份复杂 混浊矛盾的内心,给人不舒服的感觉。若是遇上这等女人,那便会有一个劳碌奔波的生活。


深而混浊型的女人颇为矛盾,丰富的阅历与经历残酷的现实早已经麻木了 那份曾经纯粹的心,一方面渴望真诚且又单纯简单的生活与感情,一方面又不敢面对残酷与现实的生活,终日忐忑与现实与梦幻之间,忽而相信感情,追求生活,忽 而沉醉现实,自甘堕落。说其简单,却不简单,说其成熟,却不成熟。只能称之为矛盾且无奈。这类女人其实需要一份或者一片希望来走出自己的内心的阴暗,只是 繁华的都市阑珊的星光往往让人看不到希望的灯火。


深而清澈型的女人算得上女人中的极品,经历俗事的风雨与坎坷,经历感情的磨砺与奔波,还能保持一份纯粹的 心灵与灵魂,已经不能用任何语言去表达这类女人的美丽与唯美。其实爱情与修养有关,就像于丹讲论语一般,虽然不太赞成她的某些观点,但是总得思路还是对 的,每个人的生活品质,感情追求,其实其直接决定的原因是每个人的个人品味与修养。这个修养,包含太多,甚至看似不相关的素质都是包含其中,以前一直在谈 论修身养性的问题,现在看来是对的,人生就像一门经营哲学,感情,生活,事业都需要用自身的素质修养去驾驭的,每个人的生活的品质层次直接来源于他的个人 修养,没有抱怨,没有不公,那便是生活。你对爱情生活的认知程度,对责任义务的把握程序直接决定了你可以遇到一个什么样的人,不要去抱怨对方的问题,其实 那便是你自己的选择。中国有一句话:”物以类聚,人以群分”,还是真的有道理的。就像老百姓常说的,看看一个人的老公,或者老婆,便知道对方是什么人了

Javascript中最常用的55个经典技巧

  1. 将彻底屏蔽鼠标右键
    oncontextmenu="window.event.returnValue=false"
    <table border oncontextmenu=return(false)><td>no</table> 可用于Table

  2. 取消选取、防止复制
    <body onselectstart="return false">

  3. 不准粘贴
    onpaste="return false"

  4. 防止复制
    oncopy="return false;" oncut="return false;"

  5. IE地址栏前换成自己的图标
    <link rel="Shortcut Icon" href="favicon.ico">

  6. 可以在收藏夹中显示出你的图标
    <link rel="Bookmark" href="favicon.ico">

  7. 关闭输入法
    <input style="ime-mode:disabled">

  8. 永远都会带着框架

    <script language="JavaScript"><!--
    if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
    // --></script>
    
  9. 防止被人frame
    <SCRIPT LANGUAGE=JAVASCRIPT><!--
    if (top.location != self.location)top.location=self.location;
    // --></SCRIPT>
    
  10. 网页将不能被另存为
    <noscript><*** src="/*.html>";</***></noscript>

  11. <input type=button value="/查看网页源代码 onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">

  12. 删除时确认
    <a href=""javascript :if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

  13. 取得控件的绝对位置

    //Javascript
    <script language="Javascript">
    function getIE(e){
        var t=e.offsetTop;
        var l=e.offsetLeft;
        while(e=e.offsetParent){
            t+=e.offsetTop;
            l+=e.offsetLeft;
        }
        alert("top="+t+"/nleft="+l);
    }
    </script>
    
  14. 光标是停在文本框文字的最后
    <script language="javascript">
    function cc()
    {
        var e = event.srcElement;
        var r =e.createTextRange();
        r.moveStart("character",e.value.length);
        r.collapse(true);
        r.select();
    }
    </script>
    <input type=text name=text1 value="123" onfocus="cc()">
    
  15. 判断上一页的来源
    document.referrer

  16. 最小化、最大化、关闭窗口

    <object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
    <param name="Command" value="Minimize"></object>
    <object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
    <param name="Command" value="Maximize"></object>
    <OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
    <PARAM NAME="Command" value="/Close"></OBJECT>
    <input type=button value="/最小化 onclick=hh1.Click()>
    <input type=button value="/blog/最大化 onclick=hh2.Click()>
    <input type=button value=关闭 onclick=hh3.Click()>
    
  17. 屏蔽功能键Shift,Alt,Ctrl
    <script>
    function look(){
        if(event.shiftKey)
            alert("禁止按Shift键!"); //可以换成ALT CTRL
    }
    document.onkeydown=look;
    </script>
    
  18. 网页不会被缓存
    <META HTTP-EQUIV="pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
    <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
    //或者
    <META HTTP-EQUIV="expires" CONTENT="0">
    
  19. 怎样让表单没有凹凸感?
    <input type=text style="""border:1 solid #000000">

    <input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: 1 solid #000000"></textarea>

  20. <div><span>&<layer>的区别?
    <div>(division)用来定义大段的页面元素,会产生转行
    <span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
    <layer>是ns的标记,ie不支持,相当于<div>

  21. 让弹出窗口总是在最上面:
    <body onblur="this.focus();">

  22. 不要滚动条?

    • 让竖条没有:
      <body style="overflow:scroll;overflow-y:hidden"></body>

    • 让横条没有:
      <body style="overflow:scroll;overflow-x:hidden"></body>

    • 两个都去掉?更简单了
      <body scroll="no"></body>

  23. 怎样去掉图片链接点击后,图片周围的虚线?
    <a href="#" onFocus="this.blur()"><img src="/logo.jpg" border=0></a>

  24. 电子邮件处理提交表单

    <form name="form1" method="post" action=mailto:****@***.com
    enctype="text/plain">
    <input type=submit>
    </form>
    
  25. 在打开的子窗口刷新父窗口的代码里如何写?
    window.opener.location.reload()

  26. 如何设定打开页面的大小
    <body onload="top.resizeTo(300,200);">
    打开页面的位置<body onload="top.moveBy(300,200);">

  27. 在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动

    <STYLE>
    body
    {background-image:url(/logo.gif); background-repeat:no-repeat;
    background-position:center;background-attachment: fixed}
    </STYLE>
    
  28. 检查一段字符串是否全由数字组成
    <script language="Javascript">
    function checkNum(str){return str.match(//D/)==null}
    alert(checkNum("1232142141"))
    alert(checkNum("123214214a1"))
    </script>
    
  29. 获得一个窗口的大小
    • document.body.clientWidth

    • document.body.clientHeight

  30. 怎么判断是否是字符

    if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
    else alert("全是字符");
    
  31. TEXTAREA自适应文字行数的多少
    <textarea rows=1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
    </textarea>
    
  32. 日期减去天数等于第二个日期
    <script language=Javascript>
    function cc(dd,dadd)
    {
        //可以加上错误处理
        var a = new Date(dd)
        a = a.valueOf()
        a = a - dadd * 24 * 60 * 60 * 1000
        a = new Date(a)
        alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
    }
    cc("12/23/2002",2)
    </script>
    
  33. 选择了哪一个Radio
    <HTML><script language="vbscript">
    function checkme()
    for each ob in radio1
    if ob.checked then
    window.alert ob.value
    next
    end function
    </script><BODY>
    <INPUT name="radio1" type="radio" value="/style" checked>Style
    <INPUT name="radio1" type="radio" value="/blog/barcode">Barcode
    <INPUT type="button" value="check" onclick="checkme()">
    </BODY></HTML>
    
  34. 脚本永不出错
    <SCRIPT LANGUAGE="JavaScript">
    function killErrors() {
        return true;
    }
    window.onerror = killErrors;
    </SCRIPT>
    
  35. ENTER键可以让光标移到下一个输入框
    <input onkeydown="if(event.keyCode==13)event.keyCode=9">

  36. 检测某个网站的链接速度:
    把如下代码加入区域中:

    <script language=Javascript>
    tim=1
    setInterval("tim++",100)
    b=1
    var autourl=new Array()
    autourl[1]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>www.njcatv.net"
    autourl[2]="javacool.3322.net"
    autourl[3]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>www.sina.com.cn"
    autourl[4]="www.nuaa.edu.cn"
    autourl[5]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>www.cctv.com"
    function butt(){
    ***("<form name=autof>")
    for(var i=1;i<autourl.length;i++)
    ***("<input type=text name=txt"+i+" size=10 value="/测试中……> =》<input type=text
    name=url"+i+" size=40> =》<input type=button value="/blog/GO
    onclick=window.open(this.form.url"+i+".value)><br>")
    ***("<input type=submit value=刷新></form>")
    }
    butt()
    function auto(url){
    document.forms[0]["url"+b].value=url
    if(tim>200)
    {document.forms[0]["txt"+b].value="/链接超时"}
    else
    {document.forms[0]["txt"+b].value="/blog/时间"+tim/10+"秒"}
    b++
    }
    function run(){for(var i=1;i<autourl.length;i++)***("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1
    onerror=auto("http://"+autourl+"")>")}
    run()</script>
    
  37. 各种样式的光标
    • auto :标准光标
    • default :标准箭头
    • hand :手形光标
    • wait :等待光标
    • text :I形光标
    • vertical-text :水平I形光标
    • no-drop :不可拖动光标
    • not-allowed :无效光标
    • help :?帮助光标
    • all-scroll :三角方向标
    • move :移动标
    • crosshair :十字标
    • e-resize
    • n-resize
    • nw-resize
    • w-resize
    • s-resize
    • se-resize
    • sw-resize
  38. 页面进入和退出的特效
    • 进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">

    • 推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">

    这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:

    1. 矩形缩小
    2. 矩形扩大
    3. 圆形缩小
    4. 圆形扩大
    5. 下到上刷新
    6. 上到下刷新
    7. 左到右刷新
    8. 右到左刷新
    9. 竖百叶窗
    10. 横百叶窗
    11. 错位横百叶窗
    12. 错位竖百叶窗
    13. 点扩散
    14. 左右到中间刷新
    15. 中间到左右刷新
    16. 中间到上下
    17. 上下到中间
    18. 右下到左上
    19. 右上到左下
    20. 左上到右下
    21. 左下到右上
    22. 横条
    23. 竖条
    24. 以上22种随机选择一种
  39. 在规定时间内跳转
    <META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">

  40. 网页是否被检索
    <meta name="ROBOTS" content="属性值">

    • 其中属性值有以下一些:
    • 属性值为”all”: 文件将被检索,且页上链接可被查询;
    • 属性值为”none”: 文件不被检索,而且不查询页上的链接;
    • 属性值为”index”: 文件将被检索;
    • 属性值为”follow”: 查询页上的链接;
    • 属性值为”noindex”: 文件不检索,但可被查询链接;
    • 属性值为”nofollow”: 文件不被检索,但可查询页上的链接。
  41. email地址的分割
    把如下代码加入<body>区域中
    <a href="mailto:webmaster@sina.com">webmaster@sina.com</a>

  42. 流动边框效果的表格
    把如下代码加入<body>区域中

    <SCRIPT>
    l=Array(6,7,8,9,'a','b','b','c','d','e','f')
    Nx=5;Ny=35
    t="<table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)*16)+"><tr>"
    for(x=Nx;x<Nx+Ny;x++)
    t+="<td width=16 id=a_mo"+x+"> </td>"
    t+="</tr><tr><td width=10 id=a_mo"+(Nx-1)+"> </td><td colspan="+(Ny-2)+" rowspan="+(Nx)+"> </td><td width=16 id=a_mo"+(Nx+Ny)+"></td></tr>"
    for(x=2;x<=Nx;x++)
    t+="<tr><td width=16 id=a_mo"+(Nx-x)+"> </td><td width=16 id=a_mo"+(Ny+Nx+x-1)+"> </td></tr>"
    t+="<tr>"
    for(x=Ny;x>0;x--)
    t+="<td width=16 id=a_mo"+(x+Nx*2+Ny-1)+"> </td>"
    ***(t+"</tr></table>")
    var N=Nx*2+Ny*2
    function f1(y){
    for(i=0;i<N;i++){
    c=(i+y)%20;if(c>10)c=20-c
    document.all["a_mo"+(i)].bgColor=""""#0000"+l[c]+l[c]+"'"}
    y++
    setTimeout('f1('+y+')','1')}
    f1(1)
    </SCRIPT>
    
  43. JavaScript主页弹出窗口技巧
    窗口中间弹出

    <script>
    window.open("http://www.cctv.com","","width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2);
    </script>
    ============
    <html>
    <head>
    <script language="LiveScript">
    function WinOpen() {
        msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
        msg.***("<HEAD><TITLE>哈 罗!</TITLE></HEAD>");
        msg.***("<CENTER><H1>酷 毙 了!</H1><h2>这 是<B>JavaScript</B>所 开 的 视 窗!</h2></CENTER>");
    }
    </script>
    </head>
    <body>
    <form>
    <input type="button" name="Button1" value="Push me" onclick="WinOpen()">
    </form>
    </body>
    </html>
    
  44. 页面的打开移动
    把如下代码加入<body>区域中

    <SCRIPT LANGUAGE="JavaScript">
    for (t = 2; t > 0; t--) {
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(0,-x);
            }
        }
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(0,x);
            }
        }
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(x,0);
            }
        }
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(-x,0);
            }
        }
    }
    </script>
    
  45. 显示个人客户端机器的日期和时间
    <script language="LiveScript">
    today = new Date()
    console.log("现 在 时 间 是: ",today.getHours(),":",today.getMinutes());
    console.log("<br>今 天 日 期 为: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
    </script>
    
  46. 自动的为你每次产生最後修改的日期了:
    <html>
    <body>
    This is a simple HTML- page.
    <br>
    Last changes:
    <script language="LiveScript">
        ***(document.lastModified)
    </script>
    </body>
    </html>
    
  47. 不能为空和邮件地址的约束:
    <html>
    <head>
    <script language="JavaScript">
    function test1(form) {
        if (form.text1.value == "")
            alert("您 没 写 上 任 何 东 西, 请 再 输 入 一 次 !")
        else {
            alert("嗨 "+form.text1.value+"! 您 已 输 入 完 成 !");
        }
    }
    function test2(form) {
        if (form.text2.value == "" || form.text2.value.indexOf('@', 0) == -1)
            alert("这 不 是 正 确 的 e-mail address! 请 再 输 入 一 次 !");
        else alert("您 已 输 入 完 成 !");
    }
    </script>
    </head>
    <body>
        <form name="first">
            Enter your name:<br>
            <input type="text" name="text1">
            <input type="button" name="button1" value="输 入 测 试" onClick="test1(this.form)">
            <P>
            Enter your e-mail address:<br>
            <input type="text" name="text2">
            <input type="button" name="button2" value="输 入 测 试" onClick="test2(this.form)">
        </form>
    </body>
    
  48. 跑马灯
    <html>
    <head>
    <script language="JavaScript">
    var scrtxt="怎麽样 ! 很酷吧 ! 您也可以试试."+"Here goes your message the visitors to your
    page will "+"look at for hours in pure fascination...";
    var lentxt=scrtxt.length;
    var width=100;
    var pos=1-width;
    function scroll() {
        pos++;
        var scroller="";
        if (pos==lentxt) {
            pos=1-width;
        }
        if (pos<0) {
            for (var i=1; i<=Math.abs(pos); i++) {
            scroller=scroller+" ";}
            scroller=scroller+scrtxt.substring(0,width-i+1);
        }
        else {
            scroller=scroller+scrtxt.substring(pos,width+pos);
        }
        window.status = scroller;
        setTimeout("scroll()",150);
    }
    </script>
    </head>
    <body onLoad="scroll();return true;">
    这里可显示您的网页 !
    </body>
    </html>
    
  49. 在网页中用按钮来控制前页,后页和主页的显示。
    <html>
    <body>
    <FORM NAME="buttonbar">
        <INPUT TYPE="button" VALUE="Back" onClick="history.back()">
        <INPUT TYPE="button" VALUE="JS- Home" onClick="location='script.html'">
        <INPUT TYPE="button" VALUE="Next" onCLick="history.forward()">
    </FORM>
    </body>
    </html>
    
  50. 查看某网址的源代码
    把如下代码加入<body>区域中

    <SCRIPT>
    function add()
    {
        var ress=document.forms[0].luxiaoqing.value
        window.location="view-source:"+ress;
    }
    </SCRIPT>
    输入要查看源代码的URL地址:
    <FORM>
        <input type="text" name="luxiaoqing" size=40 value="http://"></FORM>
    <FORM><br>
    <INPUT type="button" value="查看源代码" onClick=add()>
    </FORM>
    
  51. title显示日期
    把如下代码加入<body>区域中:

    <script language="JavaScript1.2">
    var isnMonth = new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
    var isnDay = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");
    today = new Date () ;
    Year = today.getYear();
    Date = today.getDate();
    if (document.all)
        document.title="今天是: "+Year+"年"+isnMonth[today.getMonth()]+Date+"日"+isnDay[today.getDay()]
    </script>
    
  52. 显示所有链接
    把如下代码加入<body>区域中

    <script language="JavaScript1.2">
    function extractlinks(){
        var links=document.all.tags("A")
        var total=links.length
        var win2=window.open("","","menubar,scrollbars,toolbar")
        win2.***("<font size='2'>一共有"+total+"个连接</font><br>")
        for (i=0;i<total;i++){
            win2.***("<font size='2'>"+links[i].outerHTML+"</font><br>")
        }
    }
    </script>
    <input type="button" onClick="extractlinks()" value="显示所有的连接">
    
  53. 回车键换行
    把如下代码加入<body>区域中

    <script type="text/javascript">
    function handleEnter (field, event) {
        var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
        if (keyCode == 13) {
            var i;
            for (i = 0; i < field.form.elements.length; i++)
                if (field == field.form.elements[i])
                    break;
                i = (i + 1) % field.form.elements.length;
                field.form.elements[i].focus();
            return false;
        }
        else
            return true;
    }
    </script>
    <form>
    <input type="text" onkeypress="return handleEnter(this, event)"><br>
    <input type="text" onkeypress="return handleEnter(this, event)"><br>
    <textarea>
    
  54. 确认后提交
    把如下代码加入<body>区域中

    <SCRIPT LANGUAGE="JavaScript">
    function msg(){
    if (confirm("你确认要提交嘛!"))
        document.lnman.submit()
    }
    </SCRIPT>
    <form name="lnman" method="post" action="">
        <input type="text" name="textfield" value="确认后提交">
        <input type="button" name="Submit" value="提交" onclick="msg();">
    </form>
    
  55. 改变表格的内容
    把如下代码加入<body>区域中

    <script ***script>
    var arr=new Array()
    arr[0]="一一一一一";
    arr[1]="二二二二二";
    arr[2]="三三三三三";
    </script>
    <select onchange="zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]">
    <option value=a>改变第一格</option>
    <option value=a>改变第二格</option>
    <option value=a>改变第三格</option>
    </select>
    <table id=zz border=1>
        <tr height=20>
            <td width=150>第一格</td>
            <td width=150>第二格</td>
            <td width=150>第三格</td>
        </tr>
    </table>
    

.net mvc html form beginform beginrouteform

FormExtensions类
该类定了3种类型的扩展方法,它们分别是BeginForm,BeginRouteForm,EndForm
BeginForm共有13种重载方法,这里参数不一一介绍。
BeginRouteForm共有12种重载方法,主要表现定义表单的开始部分,其中是以路由的方式设置action的值
EndForm 主要表现在表单的结尾,生成</form>
如下表单使用的几种方式:
方式1:

<%=Html.BeginForm("Login", "Home", FormMethod.Post, new { id="name"})%>
姓名<%=Html.TextBox("name", null, new { id="name",width="200px"})%><br />
密码<%=Html.Password("pass", null, new { id = "pass", width = "200px" })%><br />
<input type="submit" id="btnSubmit" value="Submit" />
<%Html.EndForm(); %>

这里注意<%=Html.BeginForm() %><%Html.EndForm();%>后者有 " ; "
Login:是指Action,Home是指Conroller,FormMethod.Post是指用Post方式来提交表单
new{id="name"} 是指表单元素属性。<form id="name" action="Home/Login" method="post"></form>

方式2:

<fieldset>
<%=Html.BeginRouteForm("Start", new { controller = "Home", action = "Login" }, FormMethod.Post)%>
姓名<%=Html.TextBox("name", null, new { id="name",width="200px"})%><br />
密码<%=Html.Password("pass", null, new { id = "pass", width = "200px" })%><br />
<input type="submit" id="Submit1" value="Submit" />
<%Html.EndForm(); %>
</fieldset>

这种方式的表单是以路由的方式设置action 的,"Start" 是路由的名称:

routes.MapRoute(
"Start",
"{controller}/{action}",
new { controller="Home",action="Index"}
);

方式3:

<fieldset>
<%using (Html.BeginForm("Login", "Home", FormMethod.Post, new { id = "name" }))
{
%>
姓名<%=Html.TextBox("name", null, new { id="name",width="200px"})%><br />
密码<%=Html.Password("pass", null, new { id = "pass", width = "200px" })%><br />
<input type="submit" id="btnSubmit" value="Submit" />
<%
} %>
</fieldset>

这种方式不需要<%Html.EndForm();%> 其余的方式基本相同

方式4:
就是普通的html代码

<form id="name" method="post" action="Home/Login">
</form>

这里不做介绍