1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head runat="server">
3 <title>GetInputValue</title>
1 <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
2 <script type="text/javascript">
3 var message = "";
4 function showMessage() {
5 message += "Document File is " + $(":file").val() + "<br />";
6 message += "Radio Value is " + $("input[name='rView']:checked").val();//获取radio选中项
7 message += "<br/>CheckBox Value is ";
8 $("input[name='cView']:checked").each(function () {
9 message += $(this).val() + ",";
10 });//获取checkbox选中项
11 message = message.substring(0, message.length - 1);
12 message += "<br/>Select value is " + $("#sView").val();//获取select选中项
13 message += "<br/>Select value is " + $("input:text").val();
14 $("p").html("").html(message);
15 message = "";
16 }
17 function setSel(value) {
18 $("#sView").val(value);
19 }
20 function setRad(value) {
21 $("input[name='rView'][value=" + value + "]").attr("checked", "true");
22 }
23 function setChk(value) {
24 var a = value.split(",");
25 for (var i = 0; i < a.length; i++) {
26 $("input[name='cView'][value=" + a[i] + "]").attr("checked", "true");
27 }
28 }
29 </script>
</head>
<body>
<p>
</p>
<div>
<table width="100%">
<tr>
<td>
<input type="radio" name="rView" value="1" />显示
<input type="radio" name="rView" value="0" />不显示
</td>
</tr>
<tr>
<td>
<input type="text" name="" value="1" />显示
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="cView" value="1" />A
<input type="checkbox" name="cView" value="0" />B
</td>
</tr>
<tr>
<td>
<select id="sView">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
</td>
</tr>
<tr>
<td>
<input id="file1" type="file" />
</td>
</tr>
</table>
</div>
<div>
<input type="button" value="获取值" onclick="showMessage()" />
<input type="button" value="设置Select值为B" onclick="setSel(2)" />
<input type="button" value="设置CheckBox值为显示" onclick="setChk('1,0')" />
<input type="button" value="设置Radio值为不显示" onclick="setRad(0)" />
</div>
</body>
</html>
使用自动回发,需要将webcontrol的AutoPostBack属性设置为True(默认为false)。设置完后,ASP.NET使用javascript的将客户端代码和服务端代码联系起来。
具体细节如下:如果创建了一个包含一个或多个web控件的页面,这些控件都使用了AutoPostBack,ASP.NET向HTML页面添加了一个_doPostBack()的javascript函数。被调用时,它就触发回发,将所有的form信息回发给web服务器。
ASP.NET还添加了两个隐藏文本,_doPostBack()函数用它们两个来把信息提交到服务器。这些信息包括触发事件的控件的ID以及其它一些相关信息。这两个隐藏文本刚开始时空的,就像这样:
1 <div class="aspNetHidden">
2 <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
3 <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
4 </div>
_doPostBack()函数负责将和事件有关的信息设置为它们的值,然后提交form。_doPostBack函数如下:
1 function __doPostBack(eventTarget, eventArgument) {
2 if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
3 theForm.__EVENTTARGET.value = eventTarget;
4 theForm.__EVENTARGUMENT.value = eventArgument;
5 theForm.submit();
6 }
7 }
_doPostBack()函数是ASP.NET自动生成的。这段代码的长度会随着页面中使用AutoPostBack控件的增多而变长,因为必须为每个控件设置事件数据。
最后,任何将AutoPostBack属性设置为True的控件会使用onclick或onchange属性和_doPostBack()联系起来。这些属性表示浏览器应该怎么响应客户端javascript的onclick和onchange事件。
下边是一个DropDownList的HTML代码,它的AutoPostBack属性为True。每次用户改变列表中的选项时,客户端的onchange事件都会触发。然后浏览器调用_doPostBack()函数将页面回发到服务器:
1 <select name="DropDownList1" onchange="javascript:setTimeout('__doPostBack(\'DropDownList1\',\'\')', 0)" id="DropDownList1">
换句话说,ASP.NET自动将客户端的javascript事件转变为服务器端ASP.NET事件,将_doPostBack()作为中介。
注意:ASP.NET包含两种控件类型:一个是HTML服务器控件,一个是web控件。只有web控件才能自动回发。
出自 Pro ASP.NET 4 In C# 2010
ASP使用了线性处理模型。页面执行按照从开始到结束的顺序执行。因此ASP开发者在一个简单的页面中也需要写相当多的代码。比如,一个web页面有三个不同的提交按钮,各自提交到不同的页面。当点击按钮提交页面时,需要在代码中判断是哪个按钮触发的,然后根据判断执行正确的操作。
ASP.NET采用的事件驱动模型,这种模型并不新鲜,它曾是windows编程开发独有的。
ASP.NET事件执行大概步骤如下:
1.页面首次运行。ASP.NET创建页面和控件对象,执行初始化代码。然后,页面渲染成HTML并返回客户端。同时页面对象从服务器内存中释放出来。
2.用户触发了postback,比如点击按钮。这时,页面的所有form数据被提交。
3.ASP.NET拦截返回的页面并重新创建页面对象,让页面保持和上次发回客户端相同的状态。
4.接下来,ASP.NET检查哪个动作触发了postback,然后它会触发相应的事件(比如,Button.Click),你的代码会响应此事件。通常,这时你会执行一些服务器端的操作(比如,更新数据库或从文件中读取数据)然后修改控件对象显示新的信息。
5.修改过的页面被渲染成HTML然后返回给客户端。页面对象从内存中释放出来。如果另一个postback触发,ASP.NET重复步骤2到4的过程。
出自Pro ASP.NET 4 In C# 2010
以前一直对utf、unicode、ascII还有GBK编码方式不太了解,只知道如果有中文的话一般用utf-8或GBK存储,今天正好又接触到了这个问题就google了下。
ASCII是用来表示英文的一种编码规范,表示的最大字符数为256个,每个字符占1个字节。如果只用来表示英文应该是绰绰有余了,可是还要表示中文、阿拉伯文所以就有很大的不足了,于是就产生了GB2312。很多人应该对这个比较了解,很多国内网页指定的编码都是GB2312的,它其实是对ASCII的一种扩展,是每个国家自己制定的编码规范,比如一个中文字符是由两个扩展ASCII字符表示。
但因为GB2312是国家标准所以会有一些问题,记得我们小时候玩一些繁体游戏时需要借助一些南极星之类的软件转换编码吗?因为台湾很多用的都是big5编码,它和GB2312的编码格式还是类似的,会显示出一些奇怪的文字或是偶尔也会有个别汉字。后来因为GB2312所包含的汉字太少了,所以又扩展出来GBK编码。
GBK包括了大部分的汉字,并且还加入了big5中几乎所有的繁体字体(但big5和GBK中的繁体字体并不兼容)。之后还有GB18030编码,其实主要还是字符集的变化。
ASCII—GB2312—GBK—GB18030他们都是向下兼容的,区分英文编码和中文编码的方法是高字节的最高位不为0,其实GB中文编码都是双字节字符集。因为GB编码都是国家标准,所以如果要解决中文问题不能从扩展ASCII角度入手了,于是出现了unicode和utf。
unicode分为UCS-2、UCS-4,目前常用的是UCS-2是用2个字节为字符编码,可以表示的数为2^16=65535,基本可以表示欧美和大部分亚洲汉字,并且因为UCS-2是双字节的所以每个汉字或英文都是由1个unicode构成,那拆字和统计字数比ASCII方便了很多。似乎unicode是比较完美了,可是它却有一个很致命的缺点,就是并不能和ASCII兼容。ASCII字符是单个字节的,比如"A"的ASCII是65。而Unicode是双字节的,比如"A"的Unicode是0065,这就造成了一个非常大的问题:以前处理ASCII的那套机制不能被用来处理Unicode了 。另一个更加严重的问题是,C语言使用'\0'作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉 。
于是出现了utf,它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2种:UTF-8和UTF-16。UTF-8是以8位为单元对UCS进行编码,它定义了一种"区间规则",这种规则可以和ASCII编码保持最大程度的兼容
转自http://hi.baidu.com/47370/blog/item/3e59773484d590b0d0a2d319.html
1.从页面资源中获取样式并应用
btnTest.Style = (Style)this.Resources["BigButtonStyle"]
2.从项目中单独分开的资源字典文件(或一个引用的程序集中)中获取样式。
首先,需要创建一个ResourceDictionary对象并提供正确的URI:
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("/Test.xaml",UriKind.Relative);
假设样式字典的名字叫Test.xaml,资源字典的编译格式必须为内容(将属性窗口的Build Action设置为Content)。
在配置好ResourceDictionary后,就可以从获取样式并应用它:
btnTest.Style = (Style)dictionary["SmallButtonStyle"];
3.移除样式
最后,要想移除样式,设置Style属性为空就可以。
btnTest.Style = null
XML属性的值始终是一个字符串,但是对象的属性可以是任何.NET类型。因此XAML语法解析器需要执行一个转换。这个转换主要通过type converters完成,来自完整版.NET 框架的基础架构的一部分。
本质上,一个类型转换器在程序中主要有一个角色------它提供一个有用的方法,把指定的.NET数据类型转换为其他类型或者将其他类型转换为.NET的指定类型。XAML解析器按以下两个步骤找到类型转换器:
1.
它检查属性的声明,查找TypeConverter属性(如果存在,TypeConverter属性表示哪些类可以执行转换)。比如,当你Foreground属性时,.NET检查Foreground属性的声明。
2.
如果在属性声明中没有TypeConverter属性,XAML转换器会检查对应的数据类型的类的声明。比如,Foreground属性用的是Brush对象。Brush类(和它的继承类)使用了BrushConverter,因为Brush类用了TypeConverter(typeof(BrushConverter))属性。
如果在属性声明或类的声明上没有相关的类型转换器,XAML解析器将会产生错误。
1.核心命名空间
1.xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"是silverlight的核心命名空间,包含所有了的silverlight的核心类。比如usercontrol和grid等.通常此命名空间声明时没有加前缀,因此它成为了整个文档的的默认命名空间。换句话说就是
页面所有的元素都默认的属于此命名空间,除非声明了其它的。
2.xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 表示XAML的命名空间。此命名空间的前缀为x。你可以通过把命名空间放在一个XML元素名称或属性前使用它(例如:x:Class="CheckNamespace.MainPage"
核心命名空间主要是让XAML解析器找到正确的类。比如,当遇到Grid和UserControl时,解析器发现它在http://schemas.microsoft.com/winfx/2006/xaml/presentation命名空间下。然后继续寻找相对应的SilverLight对应的类,直到找到匹配的类system.Windows.Usercontrol和System.Windows.Controls.Grid为止。
2.设计命名空间
和核心命名空间相对应的还有两个不是太重要的命名空间:
1.xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 表示XAML的兼容性命名空间,告诉XAML解析器哪些信息可以忽略或者哪些信息需要处理
2.xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 为特定的XAML设定的命名空间,通常在Blend中支持。主要是用来设置页面设计时的大小
比如 mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400",mc属于http://schemas.openxmlformats.org/markup-compatibility/2006,它告诉XAML解析器忽略页面内以d开头的信息是安全。
DesignHeight和DesignWidth属性是http://schemas.microsft.com/expression/blend/2008的一部分。它告诉VS或Blend在设计时显示页面大小为300*400
3.自定义命名空间
多数情况下需要在XAML中访问自己的命名空间,最常见的就是引用第三方组件或使用自己创建的silverlight自定义控件。如果是这样,需要定义一个新的XML名空间前缀并指向你的程序集。比如
<UserControl x:Class="CheckNamespace.MainPage"
xmlns:a="clr-namespace:AAA;assembly=AAALibrary"
XML命名空间包含三个部分
1.xml命名空间前缀:在XAML页面中使用xml命名空间前缀指向命名空间。比如此例子中的a,也可以使用其它自己想要的的前缀,但不允许和已有的重复,否则会发生冲突。
2.NET命名空间:在此例子中,类在AA命名空间下。如果在多个页面中使用相同的类,可以指向不同的XML命名空间或者相同的(只要和其它的不冲突)。
3.程序集:本例子中,使用到的类是AALibrary程序集一部分。silverlight会在放置你项目程序集相同的XAP包中寻找此程序集。
注意:silverlight使用了一个精简版的CLR。因此silverlight程序不能使用完整版的.NET类库。如果需要使用程序集,可以在VS中选择silverlight类库项目模板来创建一个silverlight类库。
如果使用的自定义控件位于当前应用程序内,就可以省略命名空间的程序集部分,比如
xmlns:b="clr-namespace:AAA"
在引用命名空间后,就可以在XAML文档任何地方使用,比如AAA命名空间下有一个叫MyButton的自定义控件,可以这样使用
<b:MyButton x:Name="btnTest" Click="btnTest_Click"/>
本文参考自 Pro Silverlight4 in CSharp