一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Asp.net

C#图片处理之: 另存为压缩质量可自己控制的JPEG

处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件 使用C#很方便的就可以把多种格式的图片文件读到Bitmap对象中。一句话就够了,常见的格式都支持,诸如JPEG,BMP,PNG等等。 Bitmap bmp = new Bitmap("文件名"); 然后就是怎么处理这个图片的问题了,与本案无关,pass。 最后就是保存。JPEG虽然是有损压缩方案,但是它在缩减文件体积和尽可能好的保留原有信息的矛盾上很好的找到了平衡点,所以在很多情况下成为首选的保存方案。 C#当然不会无视这一点,Bitmap类提供了默认的另存为JPEG的方法: bmp.Save("输出文件", System.Drawing.Imaging.ImageFormat.Jpeg); 这样当然很方便,但有时候更在乎文件体积而有时候更在乎图像质量,是不是有什么办法可以让自己来控制压缩质量呢? 答案是肯定的,bmp.Save方法中有个重载用到了EncoderParameters参数。我们可以在这个参数中加入自己的控制质量。 /**//// <summary> /// 保存JPG时用 /// </summary> /// <param name="mimeType"></param> /// <returns>得到指定mimeType的ImageCodecInfo</returns> private static ImageCodecInfo GetCodecInfo(string mimeType) { ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo ici in CodecInfo) { if (ici.MimeType == mimeType) return ici; } return null; } /**//// <summary> /// 保存为JPEG格式,支持压缩质量选项 /// </summary> /// <param name="bmp"></param> /// <param name="FileName"></param> /// <param name="Qty"></param> /// <returns></returns> public static bool KiSaveAsJPEG(Bitmap bmp, string FileName, int Qty) { try { EncoderParameter p; EncoderParameters ps; […]

龙生   26 Nov 2013
View Details

ASP.NET实现二维码(QRCode)的创建和读取

QR二维码比其他二维码相比,具有识读速度快、数据密度大、占用空间小的优势。QR码的三个角上有三个寻象图形,使用CCD识读设备来探测码的位置、大小、倾斜角度、并加以解码,实现360度高速识读。每秒可以识读30个含有100个字符QR码。QR码容量密度 大,可以放入1817个汉字、7089个数字、4200个英文字母。QR码用数据压缩方式表示汉字,仅用13bit即可表示一个汉字,比其他二维条码表示汉字的效率提高了20%。QR具有4个等级的纠错功能,即使破损也能够正确识读。QR码抗弯曲的性能强,通过QR码中的每隔一定的间隔配置有校正图形,从码的外形来求得推测校正图形中心点与实际校正图形中心点的误差来修正各个模快的中心距离,即使将QR码贴在弯曲的物品上也能够快速识读。QR码可以分割成16个QR码,可以一次性识读数个分割码,适应于印刷面积有限及细长空间印刷的需要。此外微型QR码可以在1厘米的空间内放入35个数字或9个汉字或21个英文字母,适合对小型电路板对ID号码进行采集的需要。(From:http://tuqiang9999.blog.163.com/blog/static/33241320111115103159542/) QRCode下载地址:ThoughtWorks.QRCode(支持中文)   一、项目引用QRCode的DLL文件(ThoughtWorks.QRCode.dll) 二、ASPX页面(两个jquery的js文件请自行去官网下载): <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">     <title>二维码工具测试</title>     <script type="text/javascript" src="../../Scripts/Jquery/jquery-1.6.2.js"></script>     <script type="text/javascript" src="../../Scripts/Jquery/jquery.form.js"></script>     <script type="text/javascript" src="js/test.js"></script>     <style type="text/css">         .style1         {             width: 100%;         }         #txt_qr         {             width: 632px;         }     </style> </head> <body>     <div>         <table class="style1">             <tr>                 <td>                     输入文字:                 </td>                 <td>                     <input type="text" id="txt_qr" name="txt_qr" />                 </td>             </tr>             <tr>                 <td>                     二维码图片                 </td>                 <td>                     <img id="qrimg" alt="二维码图片" />                 </td>             </tr>             <tr>                 <td>                     生成选项                 </td>                 <td>                     Encoding:<select id="Encoding">                         <option value="Byte">Byte</option>                         <option value="AlphaNumeric">AlphaNumeric</option>                         <option value="Numeric">Numeric</option>                     </select>                     Correction Level:<select id="Level">                         <option value="M">M</option>                         <option value="L">L</option>                         <option value="Q">Q</option>                         <option value="H">H</option>                     </select>                     Version:<input id="txt_ver" type="text" value="7" />(1-40) Size:<input id="txt_size"                         type="text" value="4" />                 </td>             </tr>             <tr>                 <td colspan="4">                     <input type="button" onclick="getQrImg();" value="生成二维码" />                 </td>             </tr>             <tr>                 <td>                     <form id="qrForm" action="Ashx/test.ashx" method="post" enctype="multipart/form-data">                     <input type="file" id="file_qr" name="file_qr" /><input type="submit" value="读取二维码" />                     </form>                 </td>                 <td colspan="1">                     <img id="img_qr" alt="要读取的图片" /><br />                     <input id="txt_readqr" type="text" />                 </td>             </tr>         </table>     </div> </body> </html> 三、test.js文件 [javascript] $(document).ready(function () {     var options = {         beforeSubmit: showRequest, […]

龙生   14 Nov 2013
View Details

MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction

一、Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页 @RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过_Layout.cshtml布局页面的@RenderBody()方法呈现在标签之间。   @RenderPage 从名称可以猜出来这个方法是要呈现一个页面。比如网页中固定的头部可以单独放在一个共享的视图文件中,然后在布局页面中通过这个方法调用,用法如下: @RenderPage(“~/Views/Shared/_Header.cshtml”) 带参数 @RenderPage(“~/Views/Shared/_Header.cshtml”,new{parm="my",parm2="you") 调用页面获取参数: //获取 RenderPage() 传递过来的参数 @PageData["param"]   @RenderSection 布局页面还有节(Section)的概念,也就是说,如果某个视图模板中定义了一个节,那么可以把它单独呈现出来 为了防止因缺少节而出现异常,可以给RenderSection()提供第2个参数: @RenderSection("head", false) 或 @if (IsSectionDefined("head")) { @RenderSection("head", false) } else { <p>SubMenu Section is not defined!</p> }   代码如下: [html] view plaincopy <!DOCTYPE html> <html> <head>     <title>@ViewBag.Title</title>     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />     <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>     @RenderSection("head", required: true)@*View页面自定义特定js/css使用*@ </head> <body>     @RenderPage("~/Views/Shared/_Header.cshtml")     @RenderBody() </body> </html>   二、创建视图,使用母版页 代码如下: [html] view plaincopy @{     ViewBag.Title = "Index";     Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Index</h2> @section Head{     <script type="text/javascript">         $(function () {             alert("hello jquery");         });     </script> } <p>执行C#普通语法</p><br /> @DateTime.Now.Date.ToShortDateString() <p>执行C#语句段</p> @{     List<string> list = new List<string> { "Mvc3", "Razor" };     list.Add(".Net4"); } <ul> @foreach(string s in list) {     if (string.IsNullOrEmpty(s))     {        <li>空</li>     }     else […]

龙生   14 Nov 2013
View Details

asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码

设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb51.net"是域名 "aaa"是站点名 "bbb.aspx"是页面名(文件名) "id=5&name=kelli"是参数 【1】获取 完整url (协议名+域名+站点名+文件名+参数) 复制代码代码如下: string url=Request.Url.ToString(); url= http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli 【2】获取 站点名+页面名+参数: 复制代码代码如下: string url=Request.RawUrl; (或 string url=Request.Url.PathAndQuery;) url= /aaa/bbb.aspx?id=5&name=kelli 【3】获取 站点名+页面名: 复制代码代码如下: string url=HttpContext.Current.Request.Url.AbsolutePath; (或 string url= HttpContext.Current.Request.Path;) url= aaa/bbb.aspx 【4】获取 域名: 复制代码代码如下: string url=HttpContext.Current.Request.Url.Host; url= www.jb51.net 【5】获取 参数: 复制代码代码如下: string url= HttpContext.Current.Request.Url.Query; url= ?id=5&name=kelli 复制代码代码如下: Request.RawUrl:获取客户端请求的URL信息(不包括主机和端口)——>/Default2.aspx Request.ApplicationPath:获取服务器上ASP.NET应用程序的虚拟路径。——>/ Request.CurrentExecutionFilePath:获取当前请求的虚拟路径。——>/Default2.aspx Request.Path:获取当前请求的虚拟路径。——>/Default2.aspx Request.PathInfo:取具有URL扩展名的资源的附加路径信息——> Request.PhysicalPath:获取与请求的URL相对应的物理文件系统路径。——>E:\temp\Default2.aspx Request.Url.LocalPath:——>/Default2.aspx Request.Url.AbsoluteUri:——>http://localhost:8080/Default2.aspx Request.Url.AbsolutePath:—————————->/Default2.aspx   转自:脚本无忧

龙生   14 Nov 2013
View Details

WebRequest之Post写法

Web.Config

  CS文件

  ashx

转自:http://www.cnblogs.com/goody9807/archive/2011/10/08/2202265.html

龙生   31 Oct 2013
View Details

自己项目中使用的信息采集类(WebRequest)

using System; using System.IO; using System.Net; using System.Text; using System.Web; namespace HP.Common { /// <summary> /// 信息 /// </summary> public class InfoCollect { /// <summary> /// 获取内网页面内容 /// </summary> /// <param name="url"></param> /// <returns></returns> public static string GetPageByInner(string url) { return GetPage("http://" + HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] == "80" ? "" : ":" + HttpContext.Current.Request.ServerVariables["SERVER_PORT"]) + url); } /// <summary> /// 获取公网url内容(GET) /// </summary> /// <param name="url"></param> /// <returns></returns> public static string GetPage(string url) { return GetPage(url, "GET", null); } /// <summary> /// 获取公网url内容(Post方法) /// </summary> /// <param name="url"></param> […]

龙生   31 Oct 2013
View Details

处理WCF异常的方式

任何程序都离不开对异常的处理,良好的异常处理方式可加快寻找出异常的根源,同时也需要避免暴露敏感信息到异常中。WCF这种典型的服务端和客户端交互的程序,服务端的异常更需要适当的处理。下面以一个简单的服务为例,说明WCF中处理异常的方式。 WCF服务定义如下,很明显方法Divide在divisor为0的时候将会抛出异常 View Code 客户端调用如下:  using (var client = new CalculateServiceClient()) { try { Console.WriteLine(client.Divide(20, 0)); } catch (FaultException ex) { Console.WriteLine(ex.Reason); } } 首先需要知道的是,WCF的异常信息默认是以FaultException的形式返回到客户端,FaultException的关键属性Reason是对客户端反馈的最重要信息之一。以上客户端代码调用之后,默认的FaultException返回的Message信息如下: 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或在打开每个 Microsoft .NET Framework 3.0 SDK 文档的跟踪的同时检查服务器跟踪日志。 根据异常的提示,意思说如果要在客户端看到详细的Exception信息,那么请将ServiceBehavior对应的IncludeExceptionDetailInFaults属性设置为True,通常在配置中表现为如下设置: View Code 通过以上设置之后,客户端输出的内容为“尝试除以零”,这个提示信息跟原始的异常信息是一致,即返回的FaultException中的Reason包含原始异常的Message的值,但是这样处理之后服务端所报出的异常信息直接传到了客户端,比如一些保密信息也可能输出到了客户端,因此对于异常信息必须进行一个封装。最直接的形式莫过于在服务端就把异常给捕获了,并重新throw一个FaultException 服务端的代码改进如下,经过以下改进,那么客户端得到的信息仅仅是"操作失败",同时服务端也记录了异常信息(这时IncludeExceptionDetailInFaults是设置为False的)。 View Code 当然这是FaultException的默认用法,FaultException还支持强类型的异常错误信息,返回更加丰富和精确的错误提示。假设定义如下通用的一个FaultContract类型,将出错时的用户名和线程名字记录到异常信息中,因为异常信息也是通过SOAP格式传输的,因此跟定义其他DataContract的方式一样。 CommonFaultContract 那么服务方法的接口需要增加如下标记,如果不这样标记,那么客户端得到的异常类型依然是FaultException,而不是强类型的异常信息。 [FaultContract(typeof(CommonFaultContract))] int Divide(int dividend, int divisor) 实现方法中抛出异常的部分代码改成如下: 异常处理 这时候重新生成客户端的代理类,然后更新客户端的代码如下,红色部分即获取强类型的异常错误信息。 View Code 当然在具体应用中还需要根据需求,返回不同的信息,构建不同的FaultContract。 以上服务端捕获的异常方法,适用于方法比较少的情况,如果有十多个方法,一个个去写try catch然后做标记等,那么工作量会很大,而且代码也不利于重用。尝试寻找像MVC Controller那样的统一处理Exception的方式,将异常处理都放在基类中,那么只要继承与这个基类的方法都不需要去写try catch去捕获异常。但WCF中似乎没有这样的机制,放弃了这种做法。 最近在研究Enterprise Lib中对WCF的支持时,发现Exception Block中还特地有针对WCF程序异常处理的解决方案,而且满足以上说道的需求,即可记录异常,又可对异常信息进行封装。更重要的时,自动处理运行时的异常信息,不需要挨个方法的去写Try catch。秉承企业库的优秀传统,大部分工作还是通过配置就可以完成了,非常好的解决方案。下面介绍具体的使用步骤。 步骤一: 引用以下dll Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.dll Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.ObjectBuilder2.dll 步骤2: 在具体的实现类中,增加如下属性标记,其中WcfException为企业库中Exception Block中的一个异常处理策略,具体如何配置异常处理策略,请参考企业库的帮助文档。 [ExceptionShielding("WcfException")] public class CalculateService : ICalculateService 那么只要增加了[ExceptionShielding("WcfException")]这个属性标记之后,所有运行时的异常都将交给策略名为WcfException的异常处理block来处理,在这里就可以执行一些异常记录以及异常封装的操作。 步骤3: 将异常信息封装为FaultException,这个动作也是通过配置来完成。在Exception节点中添加一个Fault Contract Exception Handler。 Fault Contract Exception Handler需要设置以下两个属性值 exceptionMessage:所有异常封装后的错误信息 faultContractType:即返回异常的faltContract类型,这个类型必须指定一个,哪怕方法中没有用到也要,如果方法中有用到,那么客户端那边就能得到强类型FaultException,否则就是普通的FaultException。这里指定为之前定义的CommonFaultContract。 对于faultContract类型的值,还可以通过PropertyMappings来自定义需要从原始异常信息中映射到faultContract的属性中,这个属性可选。 […]

龙生   30 Oct 2013
View Details

WCF:读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。

使用WCF传输大数据时,我们都会碰到如题中出现的错误信息,出现这个问题是因为WCF本身的安全机制导致的,限制了客户端与服务器资源传输大小,那我们如何还解决这个问题呢? 针对这个问题,我们要分发送、接受两个方面来解决。 发送大数据:在WCF服务端解决 NetTcpBinding binding =  new NetTcpBinding(); binding.MaxReceivedMessageSize= 2147483647(更改这个数字) ; 接受大数据:在WCF客户端解决 NetTcpBinding binding =  new NetTcpBinding(); binding.ReaderQuotas = new XmlDictionaryReaderQuotas() { MaxStringContentLength = 2147483647(更改这个数字) }; 我们即可以使用如上述通过代码配置,我们同样也可以使用配置文件进行配置(在binding节中)。

 

龙生   30 Oct 2013
View Details

InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)

WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: [csharp] view plaincopy 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formDataXml。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。 第 137 行,位置为 76。”。有关详细信息,请参阅 InnerException。 网上一搜索,答案基本得到解决,可我的问题就是不能解决(主要是细节打败了我),按照网上的文章进行服务器端修改配置如下: [html] view plaincopy <binding name="HttpBinding" <span style="color:#ff0000"><strong>maxReceivedMessageSize</strong></span>="2097152">     <readerQuotas maxDepth="32" <span style="color:#ff0000"><strong>maxStringContentLength</strong></span>="2097152" maxArrayLength="2097152" maxBytesPerRead="2097152" maxNameTableCharCount="2097152" />     <security mode="None"></security>  </binding>   其实这里主要的配置是两个:maxReceivedMessageSize、maxStringContentLength; 网上提到还需要配置客户端,其实如果是报上面错误就不要管客户端了,因为如果是客户端调用WCF报错,就不是读取XML数据超时,而是明确的错误提示,如下: [csharp] view plaincopy 已超过传入消息(1024)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。 所以这篇文章提到的错误基本与客户端无关。 一般情况下,安装上面的修改就可以解决问题了,但是我的WCF还是报错,没办法,只能继续找,无意间发现服务器端WCF配置有点异常,不用登录验证的WCF接口有用到bindingConfiguration,但是需要验证的WCF接口就没有配置该属性,如下代码: [html] view plaincopy    <bindings>       <wsHttpBinding>         <span style="color:#ff0000"><binding name="HttpBinding" maxReceivedMessageSize="2097152">           <readerQuotas maxDepth="32" maxStringContentLength="2097152" maxArrayLength="2097152" maxBytesPerRead="2097152" maxNameTableCharCount="2097152" />           <security mode="None"></security>         </binding></span><span style="background-color:#f0f0f0"><binding name="HttpBinding" maxReceivedMessageSize="2097152"> <readerQuotas maxDepth="32" maxStringContentLength="2097152" maxArrayLength="2097152" maxBytesPerRead="2097152" maxNameTableCharCount="2097152" /> <security mode="None"></security> </binding></span>       </wsHttpBinding>     </bindings>     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />     <services>       <service name="Achievo.MMIP.WMP.WebService.WMPProcService" behaviorConfiguration="wmpWcfBehavior">         <span style="color:#ff0000"><strong><endpoint address="" binding="wsHttpBinding" contract="Achievo.MMIP.WMP.WebServiceIService.WMPServiceProcIService"></strong> </span>          <identity>             <dns value="localhost" />           </identity>         </endpoint>         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />       </service>       <service name="Achievo.MMIP.WMP.WebService.WMPGetFormDataService" behaviorConfiguration="wmpWcfFormDataBehavior">         <span style="color:#ff0000"><strong><endpoint address="" binding="wsHttpBinding" bindingConfiguration="HttpBinding" contract="Achievo.MMIP.WMP.WebServiceIService.IWMPGetFormDataIService"></strong> </span>          <identity>             <dns value="localhost" />           </identity>         </endpoint>         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />       </service>     </services> 注意红色部分的配置,大伙可以对比一下,就发现其中一个缺少bindingConfiguration配置;如果这个时候,把缺少的部分补上,和另外一个配置一样,WCF就会出错,这里我的初步判断是:name="Achievo.MMIP.WMP.WebService.WMPProcService"是必须要验证登录才能访问,所以不能绑定上面的匿名访问的配置,简单说就是规定是验证就不能在配置为匿名;所以把配置修改为如下: [html] view plaincopy <bindings>     <wsHttpBinding>       <span style="color:#ff0000"><strong><binding name="HttpBinding" maxReceivedMessageSize="2097152">         <readerQuotas maxDepth="32" maxStringContentLength="2097152" maxArrayLength="2097152" maxBytesPerRead="2097152" maxNameTableCharCount="2097152" />         <security mode="None"></security>       </binding>       <binding name="HttpBinding1" maxReceivedMessageSize="2097152">         <readerQuotas maxDepth="32" maxStringContentLength="2097152"/>       </binding></strong></span>     </wsHttpBinding>   </bindings>   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />   <services>     <service name="Achievo.MMIP.WMP.WebService.WMPProcService" behaviorConfiguration="wmpWcfBehavior">       <strong><span style="color:#ff0000"><endpoint address="" binding="wsHttpBinding" <span style="font-size:18px">bindingConfiguration="HttpBinding1"</span> contract="Achievo.MMIP.WMP.WebServiceIService.WMPServiceProcIService"></span></strong>         <identity>           <dns value="localhost" />         </identity>       </endpoint>       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />     </service>     <service name="Achievo.MMIP.WMP.WebService.WMPGetFormDataService" behaviorConfiguration="wmpWcfFormDataBehavior">       <strong><span style="color:#ff0000"><endpoint address="" binding="wsHttpBinding" bindingConfiguration="HttpBinding" contract="Achievo.MMIP.WMP.WebServiceIService.IWMPGetFormDataIService"></span></strong>         <identity>           <dns value="localhost" />         </identity>       </endpoint>       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />     </service>   </services> 在验证,OK,通过。 转自:http://blog.csdn.net/yang_5/article/details/11775819

龙生   30 Oct 2013
View Details

Repeater控件使用(含删除,分页功能)

以SQL SERVER2000自带数据库Northwind中Customers表示例. 前台aspx代以码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Repeater.aspx.cs" Inherits="Repeater" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">     <title>Repeater控件使用</title>     <script language="javascript" type="text/javascript">     function Check(parentChk,ChildId)     {         var oElements = document.getElementsByTagName("INPUT");         var bIsChecked = parentChk.checked;        for(i=0; i<oElements.length;i++)         {             if( IsCheckBox(oElements[i]) &&                 IsMatch(oElements[i].id, ChildId))             {                 oElements[i].checked = bIsChecked;             }         }      }     function IsMatch(id, ChildId)     {         var sPattern =’^Repeater1.*’+ChildId+’$';         var oRegExp = new RegExp(sPattern);         if(oRegExp.exec(id))             return true;         else             return false;     }     function IsCheckBox(chk)     {         if(chk.type == 'checkbox') return true;         else return false;     }     </script> </head> <body>     <form id="form1" runat="server">     <div style="margin-bottom:20px;text-align:center; width:1006px;">Repeater控件使用</div> <asp:Repeater ID="Repeater1" runat="server">     <%--SeparatorTemplate描述一个介于每条记录之间的分隔符--%>     <%--<SeparatorTemplate>         <tr>         <td colspan="5"><hr /></td>         </tr>     </SeparatorTemplate>--%>     <HeaderTemplate>       <table border="1" cellpadding="0" cellspacing="0" style="width:1006px;border-collapse:collapse; text-align:center;">       <tr>         <td style="background-color:#cccccc; font-weight:bold; height:25px;"><input id="chkAll" name="chkAll" runat="server" type="checkbox" onclick="Check(this,’chkItem')" title="全选" />全</td>         <td style="background-color:#cccccc; font-weight:bold; height:25px;">View</td>         <td style="background-color:#cccccc; font-weight:bold; height:25px;">CustomerID</td>         <td style="background-color:#cccccc; font-weight:bold;">CompanyName</td>         <td style="background-color:#cccccc; font-weight:bold;">ContactName</td>         <td style="background-color:#cccccc; font-weight:bold;">ContactTitle</td>         <td style="background-color:#cccccc; font-weight:bold;">Address</td>       </tr>     </HeaderTemplate>     <ItemTemplate>       <tr>         <td><asp:CheckBox ID="chkItem" runat="server" /></td>         <td><a href='<%# "View.aspx?id="+DataBinder.Eval(Container.DataItem, "CustomerID") %>' target="_blank">View</a></td>         <td><asp:Label ID="lblID" Text='<%# DataBinder.Eval(Container.DataItem, "CustomerID")%>' runat="server"></asp:Label></td>         <td><%# DataBinder.Eval(Container.DataItem, "CompanyName")%></td>         <td><%# DataBinder.Eval(Container.DataItem, "ContactName")%></td>         <td><%# DataBinder.Eval(Container.DataItem, "ContactTitle")%></td>         <td><%# DataBinder.Eval(Container.DataItem, "Address")%></td>       </tr>     </ItemTemplate>     <%--AlternatingItemTemplate描述交替输出行的另一种外观--%>     <AlternatingItemTemplate>       <tr bgcolor="#e8e8e8">         <td><asp:CheckBox ID="chkItem" runat="server" /></td>         <td><a href='<%# "View.aspx?id="+DataBinder.Eval(Container.DataItem, "CustomerID") %>' target="_blank">View</a></td>         <td><asp:Label ID="lblID" Text='<%# DataBinder.Eval(Container.DataItem, "CustomerID")%>' runat="server"></asp:Label></td>         <td><%# DataBinder.Eval(Container.DataItem, "CompanyName")%></td>         <td><%# DataBinder.Eval(Container.DataItem, "ContactName")%></td>         <td><%# DataBinder.Eval(Container.DataItem, "ContactTitle")%></td>         <td><%# DataBinder.Eval(Container.DataItem, "Address")%></td>       </tr>     </AlternatingItemTemplate>     <FooterTemplate>      </table>     </FooterTemplate> </asp:Repeater> <div style="background-color:#dedede; width:1006px;"> […]

龙生   14 Aug 2013
View Details
1 33 34 35 44