posts - 22, comments - 17, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2007年9月5日

1.
for(var num=1;num<20;num++)
{
var re=new   RegExp("\\\[face"+num+"\\\]","gm");  
aa=aa.replace(re,"http://imgs.soufun.com/pic/UserAlbum/mk"+num+".gif");
}


2. 返回匹配结果

<script>
var aa="[face1][face2][face3][face4][face5][face6][face1][face1]werwerwerewr";

//for(var num=1;num<20;num++)
//{
//var re=new   RegExp("\\\[face.*?\\\]","gm");
var re=/\[face.*?\]/g; 
//aa=aa.replace(re,"http://imgs.soufun.com/pic/UserAlbum/mk"+num+".gif");
var tmp=aa.match(re);
//}
for(var i=0;i<tmp.length;i++)
{
aa=aa.replace(tmp[i],"http://imgs.soufun.com/pic/UserAlbum/mk"+tmp[i].substring(5,tmp[i].length-1)+".gif")

}
alert(aa);
</script>


posted @ 2008-06-30 11:03 yuanws 阅读(24) | 评论 (0)编辑

在本文中,我们仍然使用在一步一步学Silverlight 2系列(12):数据与通信之WebClient中用过的示例,只不过稍微做一点小的改动,使用WebRequest提交书籍编号数据,并根据书籍号返回价格信息。最终运行的结果如下图:

TerryLee_Silverlight2_0062

编写界面布局,XAML如下:

<Grid Background="#46461F">
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="40"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" CornerRadius="15"
Width="240" Height="36"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock Text="书籍列表" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
<ListBox x:Name="Books" Grid.Row="1" Margin="40 10 10 10"
SelectionChanged="Books_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" Height="32"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Grid.Row="2" Grid.Column="0" CornerRadius="15"
Width="240" Height="36" Background="Orange"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock x:Name="lblPrice" Text="价格:" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
</Grid>
编写HttpHandler,注意我使用了context.Request.Form["No"],在后面我们将使用WebRequest在RequestReady方法中将数据写入请求流:
public class BookHandler : IHttpHandler
{
public static readonly string[] PriceList = new string[] {
"66.00",
"78.30",
"56.50",
"28.80",
"77.00"
};
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(PriceList[Int32.Parse(context.Request.Form["No"])]);
}
public bool IsReusable
{
get
{
return false;
}
}
}

在界面加载时绑定书籍列表,关于数据绑定可以参考一步一步学Silverlight 2系列(11):数据绑定

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List<Book> books = new List<Book>() {
new Book("Professional ASP.NET 3.5"),
new Book("ASP.NET AJAX In Action"),
new Book("Silverlight In Action"),
new Book("ASP.NET 3.5 Unleashed"),
new Book("Introducing Microsoft ASP.NET AJAX")
};
Books.ItemsSource = books;
}

接下来在SelectionChanged事件中实现用户选择书籍时,我们使用WebRequest提交书籍编号,并且获得价格数据,仍然采用异步模式,提供RequestReady和ResponseReady两个回调函数:

private string bookNo;
void Books_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
bookNo = Books.SelectedIndex.ToString();
Uri endpoint = new Uri("http://localhost:49955/BookHandler.ashx");
WebRequest request = WebRequest.Create(endpoint);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);
request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}

实现RequestReady方法,将书籍的编号写入请求流中。

void RequestReady(IAsyncResult asyncResult)
{
WebRequest request = asyncResult.AsyncState as WebRequest;
Stream requestStream = request.EndGetRequestStream(asyncResult);
using (StreamWriter writer = new StreamWriter(requestStream))
{
writer.Write(String.Format("No={0}", bookNo));
writer.Flush();
}
}

实现ResponseReady方法,显示返回的结果。

void ResponseReady(IAsyncResult asyncResult)
{
WebRequest request = asyncResult.AsyncState as WebRequest;
WebResponse response = request.EndGetResponse(asyncResult);
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream);
lblPrice.Text = "价格:" + reader.ReadToEnd();
}
}

最后运行的结果如下:

TerryLee_Silverlight2_0059

用户选择一本书籍后,将显示其价格:

TerryLee_Silverlight2_0062

posted @ 2008-06-18 14:58 yuanws 阅读(16) | 评论 (0)编辑

编写一个简单的示例,在该示例中,选择一本书籍之后,我们通过Web Client去查询书籍的价格,并显示出来,最终的效果如下:

TerryLee_Silverlight2_0059

编写界面布局,XAML如下:

<Grid Background="#46461F">
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="40"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" CornerRadius="15"
Width="240" Height="36"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock Text="书籍列表" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
<ListBox x:Name="Books" Grid.Row="1" Margin="40 10 10 10"
SelectionChanged="Books_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" Height="32"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Grid.Row="2" Grid.Column="0" CornerRadius="15"
Width="240" Height="36" Background="Orange"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock x:Name="lblPrice" Text="价格:" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
</Grid>

为了模拟查询价格,我们编写一个HttpHandler,接收书籍的No,并返回价格:

public class BookHandler : IHttpHandler
{
public static readonly string[] PriceList = new string[] {
"66.00",
"78.30",
"56.50",
"28.80",
"77.00"
};
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(PriceList[Int32.Parse(context.Request.QueryString["No"])]);
}
public bool IsReusable
{
get
{
return false;
}
}
}

在界面加载时绑定书籍列表,关于数据绑定可以参考一步一步学Silverlight 2系列(11):数据绑定

void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List<Book> books = new List<Book>() {
new Book("Professional ASP.NET 3.5"),
new Book("ASP.NET AJAX In Action"),
new Book("Silverlight In Action"),
new Book("ASP.NET 3.5 Unleashed"),
new Book("Introducing Microsoft ASP.NET AJAX")
};
Books.ItemsSource = books;
}

接下来当用户选择一本书籍时,需要通过Web Client去获取书籍的价格,在Silverlight 2中,所有的网络通信API都设计为了异步模式。在声明一个Web Client实例后,我们需要为它注册DownloadStringCompleted事件处理方法,在下载完成后将会被回调,然后再调用DownloadStringAsync方法开始下载。

void Books_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Uri endpoint = new Uri(String.Format("http://localhost:49955/BookHandler.ashx?No={0}",Books.SelectedIndex));
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(endpoint);
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
lblPrice.Text = "价格:" + e.Result;
}
else
{
lblPrice.Text = e.Error.Message;
}
}

注意大家可以在Web Application Project的属性页中,把ASP.NET Development Server的端口号设置为一个固定的端口号:

TerryLee_Silverlight2_0060

最后完整的代码如下:

public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}
void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List<Book> books = new List<Book>() {
new Book("Professional ASP.NET 3.5"),
new Book("ASP.NET AJAX In Action"),
new Book("Silverlight In Action"),
new Book("ASP.NET 3.5 Unleashed"),
new Book("Introducing Microsoft ASP.NET AJAX")
};
Books.ItemsSource = books;
}
void Books_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Uri endpoint = new Uri(String.Format("http://localhost:49955/BookHandler.ashx?No={0}",Books.SelectedIndex));
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(endpoint);
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
lblPrice.Text = "价格:" + e.Result;
}
else
{
lblPrice.Text = e.Error.Message;
}
}
}

运行后效果如下:

TerryLee_Silverlight2_0059

当我们选择其中一本书籍时,将会显示出它的价格:

TerryLee_Silverlight2_0061

结束语

posted @ 2008-06-18 14:57 yuanws| 编辑

update  tags   set  usednumber=usednumber+(select b.usednumber
from  tag_tousenumber b
where tags.tagname=b.tagname and tags.channelid=b.channelid and datediff(day,b.addeddate,getdate())<1)

 

posted @ 2008-05-20 11:28 yuanws 阅读(16) | 评论 (0)编辑

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  yuanwensheng
-- Create date: 2008-4-25
-- Description: 相册评论
-- =============================================
alter PROCEDURE SelectComments

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='',      -- 排序的字段名

@PageSize   int = 10,          -- 页尺寸

@PageIndex int = 1,           -- 页码

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @tblName varchar(255)         --表名

declare @strSQL   varchar(5000)       -- 主语句

declare @strTmp   varchar(110)        -- 临时变量

declare @strOrder varchar(400)        -- 排序类型


declare @sql varchar(2000)            -- 生成临时表时用到的变量
declare @count int                    -- 个人相册的表数量


begin

    --把所有需要的数据导入临时表 开始
    create table #tbTmp(CommentID int,PictureID bigint,UserID bigint,CommentUserID bigint,CommentUserName nvarchar(50),Content nvarchar(1000),AddedTime datetime,tbtable nvarchar(255));  
   --因为要有删除记录操作 所以得CommentID(仅是单表的主键)  和tbtable  组合做主键才可以
    set @count=1;
    if @strWhere!=''
 begin
    set @sql='select *,''PicturesComments_0''  tbtable  from PicturesComments_0 where '+@strWhere;
 end
 else
 begin
  set @sql='select *,''PicturesComments_0'' from PicturesComments_0';
 end
  
    --循环开始
    WHILE   @count<10
 begin

 if @strWhere!=''
 begin
    set @sql=@sql+' union all  select *,''PicturesComments_'+cast(@count as varchar)+''' from PicturesComments_'+cast(@count as varchar)+' where '+@strWhere;
 end
 else
 begin
  set @sql=@sql+' union all  select *,''PicturesComments_'+cast(@count as varchar)+''' from PicturesComments_'+cast(@count as varchar);
 end
  set @count=@count+1;
 end
 --循环结束
    insert into #tbTmp  exec (@sql);


 

   -- 结束
   
    set @tblName = '#tbTmp';

    if @strWhere !=''

    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere

    else

    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
    
    exec (@strSQL);

 

if @OrderType != 0

begin

    set @strTmp = '<(select min'

set @strOrder = ' order by [' + @fldName +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

    set @strTmp = '>(select max'

    set @strOrder = ' order by [' + @fldName +'] asc'

end

if @PageIndex<1
begin
set @PageIndex=1
--如果输入负值变为第一页
end

if @PageIndex = 1

begin

--    if @strWhere != '' 
--
--    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
--
--     else

     set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['

    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
 + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
 + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder

--if @strWhere != ''
--
--    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
--
--        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
--
--        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
--
--        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
--
--        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end 

exec (@strSQL)

GO

posted @ 2008-04-25 18:48 yuanws 阅读(56) | 评论 (0)编辑

1. 常规写法

 // 创建一个XmlDocument对象,用于载入存储信息的XML文件
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(Server.MapPath("guestbook.xml"));

            // 创建一个新的guest节点并将它添加到根节点下
            XmlElement parentNode = xdoc.CreateElement("guest");
            xdoc.DocumentElement.PrependChild(parentNode);
          
            // 创建所有用于存储信息的节点
            XmlElement namenode = xdoc.CreateElement("name");
            XmlElement emailNode = xdoc.CreateElement("email");
            XmlElement qqNode = xdoc.CreateElement("qq");
            XmlElement homepageNode = xdoc.CreateElement("homepage");
            XmlElement commentNode = xdoc.CreateElement("comment");

            // 获取文本信息
            XmlText nameText  = xdoc.CreateTextNode(TextBox1.Text);
            XmlText emailText = xdoc.CreateTextNode(TextBox2.Text);
            XmlText qqText = xdoc.CreateTextNode(TextBox3.Text);
            XmlText homepageText = xdoc.CreateTextNode(TextBox4.Text);
            XmlText commentText = xdoc.CreateTextNode(TextBox5.Text);

            // 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
            parentNode.AppendChild(namenode);
            parentNode.AppendChild(emailNode);
            parentNode.AppendChild(qqNode);
            parentNode.AppendChild(homepageNode);
            parentNode.AppendChild(commentNode);

            // 将上面获取的文本信息添加到与之相对应的节点中
            namenode.AppendChild(nameText);
            emailNode.AppendChild(emailText);
            qqNode.AppendChild(qqText);
            homepageNode.AppendChild(homepageText);
            commentNode.AppendChild(commentText);

            xdoc.Save(Server.MapPath("guestbook.xml"));

xslt转换
            Xml1.DocumentSource = Server.MapPath("guestbook.xml");
            Xml1.TransformSource = Server.MapPath("guestBook.xslt");

绑定gridview 
             DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath("guestbook.xml"));
            this.GridView1.DataSource = ds.Tables[0].DefaultView;
            this.GridView1.DataBind();

下载文件 guestbookxml 和xslt文件格式

2. linq 

   XDocument xdoc = XDocument.Load(Server.MapPath("guestbook.xml"));//var
            var zz = from p in xdoc.Elements("guestbook").Elements("guest")
                     where  (p.Attribute("style")== null)||(p.Attribute("style").Value!="display")
                     select new { name = p.Element("name").Value, emali = p.Element("email").Value, qq = p.Element("qq").Value };
            GridView1.DataSource = zz;
            GridView1.DataBind();

创建
XDocument xdoc = new XDocument(
                new XDeclaration("1.0", "utf-8", null),
                new XElement("guestbook",
                    new XElement("guest",
                        new XElement("name", "jack"),
                        new XElement("age", "20")),
                    new XElement("guest",
                        new XElement("name", "tom"),
                        new XElement("age", "15"))
                        ));
            xdoc.Save(Server.MapPath("aa.xml"));

查找
  var aa = from a in xdoc.Descendants("name")
                     where a.Value == "jack"
                     select a;
            foreach (var aaa in aa)
            {
                Response.Write(aaa);
            }

posted @ 2008-03-31 15:03 yuanws 阅读(16) | 评论 (0)编辑

1. IList<city> cc = new List<city> { new city { Name = "100", DistanceFromSeattle = 10, Country = "中国" }, new city { Name = "10", DistanceFromSeattle = 20, Country = "美国" } };          
            GridView1.DataSource = from p in cc  where p.DistanceFromSeattle>10 orderby p.DistanceFromSeattle descending select p; // aa.getData().Tables[0];
            
           GridView1.DataBind();

2. DataClasses1DataContext dc = new DataClasses1DataContext();
            GridView1.DataSource = from p in dc.dnt_users where p.username.Length > 5 orderby p.username descending select p;
            GridView1.DataBind(); 

   或者GridView1.DataSource = dc.dnt_users .Where(p=>p.username.Length > 5);
         GridView1.DataBind(); 


   表关联   GridView1.DataSource = from p in dc.dnt_helps
                                   join m in dc.dnt_postids
                                   on p.pid equals m.pid
                                   select new
                                   { p.message, p.id, p.title, m.postdatetime };
            GridView1.DataBind();

3. 存储过程EmployeeDataContext edc = new EmployeeDataContext();
            string firstname = "alice";
            string lastname = "wange";
            this.GridView1.DataSource = edc.ProcInsertEmployee(lastname, firstname);
            //edc.ProcInsertEmployeeResult("alice", "wang");
            this.GridView1.DataBind();

4.添删改操作
     DataClasses1DataContext dc = new DataClasses1DataContext();

添加 dnt_help dp = new dnt_help(); //表dnt_help
            dp.title = "10";
            dp.message = "中国";
            dp.pid = 10;
            dp.orderby = 1;
            dc.dnt_helps.InsertOnSubmit(dp); //插入
            dc.SubmitChanges();              //提交
            BindAll(); //绑定函数

修改 var zz = from p in dc.dnt_helps where p.title == "10" select p;
            foreach (dnt_help dh in zz)
            {
                dh.title = "china";
            }
            dc.SubmitChanges();
            BindAll();

删除 var zz = from p in dc.dnt_helps where p.title == "china" select p;
            if (zz.Count<dnt_help>() > 0)
            {  
                dc.dnt_helps.DeleteOnSubmit(zz.First<dnt_help>()); (1)
                dc.SubmitChanges();  (2)
                BindAll();
            }  //批量删除需要自己做扩展,要么循环(1)+(2),还有就是做存储过程

posted @ 2008-03-31 11:36 yuanws 阅读(143) | 评论 (5)编辑

一. HTTP压缩概述

HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。

本文介绍的HTTP压缩方式,采用的是Windows系统设置的方式,优点是效率较高。


二. HTTP压缩工作原理

Web服务器处理HTTP压缩的工作原理如下:

Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;
如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
如果请求文件是ASPX等动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。


三. IIS 6.0中配置HTTP Gzip压缩的步骤:

1) 打开Internet信息服务(IIS)管理器,右击"网站"->"属性",选择"服务"。在"HTTP压缩"框中选中"压缩应用程序文件"和"压缩静态文件",按需要设置"临时目录"和"临时目录的最大限制";

2) 在Internet信息服务(IIS)管理器,右击"Web服务扩展"->"增加一个新的Web服务扩展...",在"新建Web服务扩展"框中输入扩展名"HTTPCompression",添加"要求的文件"为C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中"设置扩展状态为允许";

3) 使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),找到Location ="/LM/W3SVC/Filters/Compression/gzip",如果需要压缩动态文件,则将HcDoDynamicCompression设置为"TRUE",并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为"TRUE",并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数字越小压缩率越低;

4) 编辑完毕后保存MetaBase.xml文件;如果文件无法保存,则可能IIS正在使用该文件。打开"开始"->"管理工具"->"服务",停止"IIS Admin Service"后,即可保存;

5) 最后,重新启动IIS。可以到HTTP压缩测试网站验证结果。

posted @ 2008-01-17 09:29 yuanws 阅读(23) | 评论 (0)编辑

     摘要: 自定义一个继承自httphandle的类CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1usingSystem;2usingSystem.Web;3usingSystem.IO;45namespaceWebTj.Jhttphandle6{7/... 阅读全文

posted @ 2007-12-25 09:16 yuanws 阅读(46) | 评论 (0)编辑

Reading guide: 使用Request.ServerVariables[string name]可以获取的各项变量名称
环境变量 变量值
ALL_HTTP HTTP_CONNECTION:Keep-Alive HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* HTTP_ACCEPT_ENCODING:gzip, deflate HTTP_ACCEPT_LANGUAGE:zh-cn HTTP_COOKIE:ASP.NET_SessionId=5dchvi3oayuayd55zlrx35av HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
ALL_RAW Connection: Keep-Alive Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Encoding: gzip, deflate Accept-Language: zh-cn Cookie: ASP.NET_SessionId=5dchvi3oayuayd55zlrx35av Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
APPL_MD_PATH /LM/w3svc/1/root/Temp/WebApp
APPL_PHYSICAL_PATH c:\inetpub\wwwroot\Temp\WebApp\
AUTH_TYPE  
AUTH_USER  
AUTH_PASSWORD  
LOGON_USER  
REMOTE_USER  
CERT_COOKIE  
CERT_FLAGS  
CERT_ISSUER  
CERT_KEYSIZE  
CERT_SECRETKEYSIZE  
CERT_SERIALNUMBER  
CERT_SERVER_ISSUER  
CERT_SERVER_SUBJECT  
CERT_SUBJECT  
CONTENT_LENGTH 0
CONTENT_TYPE  
GATEWAY_INTERFACE CGI/1.1
HTTPS off
HTTPS_KEYSIZE  
HTTPS_SECRETKEYSIZE  
HTTPS_SERVER_ISSUER  
HTTPS_SERVER_SUBJECT  
INSTANCE_ID 1
INSTANCE_META_PATH /LM/W3SVC/1
LOCAL_ADDR 127.0.0.1
PATH_INFO /Temp/WebApp/ServerVariables.aspx
PATH_TRANSLATED c:\inetpub\wwwroot\Temp\WebApp\ServerVariables.aspx
QUERY_STRING  
REMOTE_ADDR 127.0.0.1
REMOTE_HOST 127.0.0.1
REMOTE_PORT 4529
REQUEST_METHOD GET
SCRIPT_NAME /Temp/WebApp/ServerVariables.aspx
SERVER_NAME localhost
SERVER_PORT 80
SERVER_PORT_SECURE 0
SERVER_PROTOCOL HTTP/1.1
SERVER_SOFTWARE Microsoft-IIS/5.0
URL /Temp/WebApp/ServerVariables.aspx
HTTP_CONNECTION Keep-Alive
HTTP_ACCEPT image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
HTTP_ACCEPT_ENCODING gzip, deflate
HTTP_ACCEPT_LANGUAGE zh-cn
HTTP_COOKIE ASP.NET_SessionId=5dchvi3oayuayd55zlrx35av
HTTP_HOST localhost
HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)

posted @ 2007-11-29 15:45 yuanws 阅读(52) | 评论 (0)编辑

1.
string cnnstring = System.Configuration.ConfigurationSettings.AppSettings["Oracle"].ToString();
      OracleConnection conn=new OracleConnection(cnnstring);
   OracleCommand cmd=new OracleCommand("select spxxid,spdt from jt_j_spxx where spdt is not null order by spxxid desc ",conn);
   //OracleCommand cmd=new OracleCommand("select spxxid,spdt from jt_j_spxx order by spxxid desc ",conn);
            //OracleCommand cmd=new OracleCommand("select spxxid,spdt from jt_j_spxx where spxxid='756336553'",conn);
   conn.Open();
   OracleDataReader myReader;
            myReader = cmd.ExecuteReader();
   while(myReader.Read())
   {
    
    fpath = Server.MapPath(Request.ApplicationPath)+"/image/"+myReader.GetString(0)+".jpg";
                 fs =new FileStream(fpath, FileMode.OpenOrCreate, FileAccess.Write);
                 bw = new BinaryWriter(fs);
    outbyte = (byte[])myReader[1];
    bw.Write(outbyte);
    bw.Flush();
     bw.Close();
                fs.Close();

   }
   myReader.Close();
            conn.Close();

2. 
  upfile(System.Configuration.ConfigurationSettings.AppSettings["ForumUrl"]+"/Movie/default.aspx","~/Movie/index.html");

public void upfile(string url,string mappath)
  {
   try
   {
    Uri UrlPage= new Uri(url);
    HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(UrlPage);
    hwReq.Timeout = 50000 ;
    HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse();
    hwReq.Method = "Post";
    hwReq.KeepAlive = true;


    StreamWriter fs =new StreamWriter(Server.MapPath(mappath),false,System.Text.Encoding.UTF8);
    StreamReader  fs2=new StreamReader(hwRes.GetResponseStream(),System.Text.Encoding.UTF8);
    string nextline;
    while((nextline=fs2.ReadLine())!=null)
    {
     fs.WriteLine(nextline);
    }
    fs.Close();
    fs2.Close();
    Response.Write("<script>alert('生成成功');</script>");
   }
   catch
   {
    Response.Write("<script>alert('生成超时,请重新生成');</script>");
   }
    
  }
3.

if(File.Exists(Server.MapPath("../zthtml/temp/"+str))==false)
    {
     Response.Write("<script>alert('没有找到模板,请确定模板的名字正确!');</script>");
    }
    else
    {
     StreamReader objReader = new StreamReader(Server.MapPath("~/zthtml/temp/"+str),System.Text.Encoding.GetEncoding("gb2312"));
           

     string sLine="";
     sLine=objReader.ReadToEnd();
     objReader.Close();


}StreamWriter sw=new StreamWriter(Server.MapPath("~/zthtml/"+str.Substring(0,str.IndexOf(".",1))+".shtml"),false,System.Text.Encoding.GetEncoding("gb2312"),sLine.Length);
    
     sw.Write(sLine);

posted @ 2007-11-22 15:07 yuanws 阅读(33) | 评论 (0)编辑

大多数 ADO.NET 数据提供程序使用连接池,以提高围绕 Microsoft 断开连接的 .NET 结构构建的应用程序的性能。应用程序首先打开一个连接(或从连接池获得一个连接句柄),接着运行一个或多个查询,然后处理行集,最后将连接释放回连接池。如果没有连接池,这些应用程序将花费许多额外时间来打开和关闭连接。

当您使用 ADO.NET 连接池来管理基于 Web 的应用程序和客户端/服务器 Web 服务应用程序的连接时,您的客户通常会获得更快的连接和更好的总体性能。但是,当您的应用程序或 Web 站点上突然涌入了同时希望进行连接的大量客户时,会发生什么事情呢?您的应用程序会“沉没”,还是会“游泳”?就像救生员一样,您需要仔细监视连接池,以维护它的良好性能,并防止连接池发生溢出。我们首先探讨连接池可能溢出的原因,然后讨论如何编写代码或使用 Windows 性能监视器来监视连接池。
当您使用连接池时,您需要知道许多有关可伸缩性和性能的详细信息。请记住,您需要监视和管理两个基本因素:每个池管理的连接数和连接池的数量。在一个有效的生产系统中,池的数量通常很少(1 到 10),而且,使用中的连接的总数也很少(少于 12 )有效的查询只用不到一秒钟的时间就可以完成,并断开连接。因此,即使有数百个客户同时访问您的 Web 站点,相对较少的几个连接常常足以处理整个负载。为了使您的应用程序有效地运行,您必须使连接资源处于自己的控制之下,并要监视池的状态,这样,在监视池发生溢出以及您的客户开始抱怨(或离开您的网站)之前您会收到某种警告。

为什么会发生连接池溢出?
参加电子邮件讨论组的人常常抱怨应用程序是如何在测试中是“龙”而在形成为产品时就变成了“虫”的。有时,他们会报告说,当连接了大约 100 个客户端时,应用程序会停止或挂起。请记住,一个池中的默认连接数是 100。如果您尝试从池中打开 100 个以上的连接,ADO.NET 会使应用程序的连接请求排队等候,直到有空闲的连接。应用程序(及其用户)将这种情况视为进入 Web 页的延迟或视为应用程序死锁。让我们首先讨论一下这个问题是如何产生的。

在 ADO.NET 中,SqlClient .NET 数据提供程序为您提供了两种打开和管理连接的方法。首先,当您需要手工管理连接时,可以使用 DataReader 对象。利用这种方法,您的代码将构造一个 SqlConnection 对象,设置 ConnectionString 属性,然后使用 Open 方法来打开连接。当代码完成 DataReader 后,您要在 SqlConnection 对象停止作用之前关闭 SqlConnection。要处理行集,您可以将 DataReader 传递到应用程序中的另一个例程,但仍然需要确保 DataReader 及其连接处于关闭状态。如果您不关闭 SqlConnection,代码会“泄漏”每个操作的连接,于是连接池对连接进行累积,最后便发生溢出。与 ADO 和 Visual Basic (VB) 6.0 中的情况不同,.NET 垃圾回收器不会为您关闭 SqlConnection 并进行清理。我稍后要讨论的 清单 1 显示了如何打开连接和生成 DataReader 以从一个简单的查询返回行集,来向连接池施加压力的。

您也可能在使用 DataAdapter 对象时遇到问题。DataAdapter Fill 和 Update 方法可自动打开 DataAdapter 对象的连接,并在数据 I/O 操作完成后关闭该连接。不过,如果该连接在执行 Fill 或 Update 方法时已经处于打开状态,那么,ADO.NET 在方法执行完以后不会关闭 SqlConnection。这是另一个发生连接“泄漏”的机会。

此外,您还可以使用基于 COM 的 ADO 从 .NET 应用程序创建连接。ADO 利用与 ADO.NET 相同的方式将这些连接组合成池,但不能像您使用 SqlClient ADO.NET 数据提供程序时那样,提供从应用程序监视连接池的方式。

指示 DataReader

孤立连接和溢出池是严重的问题,根据有关这些问题的新闻组讨论的数量来看,它们十分常见。这些问题最有可能是由 DataReader 引起的。为了测试 DataReader 的行为,我编写了一个 Windows 窗体 (WinForms) 示例应用程序,该示例突出了 CommandBeh***ior.CloseConnection 选项。(您可以在 http://www.sqlmag.com 上输入 InstantDoc ID 39031 来下载此应用程序)。您可以在使用 SqlCommand 对象的 ExecuteReader 方法来执行查询并返回 DataReader 时设定此选项。我的测试应用程序显示,如果不显式关闭 DataReader(或 SqlConnection),即使使用此选项,连接池还是会溢出。当代码所请求的连接数超过连接池的容量时,该应用程序就会引发异常。

有些开发人员坚持认为,如果您设置 CommandBeh***ior.CloseConnection 选项,则 DataReader 及其相关联的连接会在 DataReader 完成数据读取时自动关闭。这些开发人员的看法不完全正确 — 只有当您在 ASP.NET Web 应用程序中使用复杂的绑定控件时,该选项才以这种方式工作。在整个 DataReader 结果集中循环到其行集的末尾(也就是说,当 Dr.Read — DataReader 的 Read 方法 — 返回 False 时)还不足以触发连接的自动关闭。不过,如果您绑定到一个复杂的绑定控件(例如,DataGrid),该控件则会关闭 DataReader 和连接 — 前提条件是您设置了 CommandBeh***ior.CloseConnection 选项。

如果您通过使用另一个 Execute 方法(例如,ExecuteScalar、ExecuteNonQuery 和 ExecuteXMLReader)执行查询,则您需要负责打开 SqlConnection 对象,而且,更重要的是,在查询结束时关闭该对象。如果您忘记了进行关闭,孤立连接会迅速地积累起来。

posted @ 2007-11-07 15:15 yuanws 阅读(43) | 评论 (0)编辑

request.params其实是一个集合,它依次包括request.querystring、request.form、request.cookies和request.servervariables。



如果要在两个页面传递数据的话,只能用request.querystring、request.form、request.cookies

Request.Params 是在 QueryString、Form、Server Variable 以及 Cookies 找数据,

他首先在 QueryString 集合查找数据,如果在 QueryString 找到数据,就返回数据,如果没有找到就去 Form 集合中查找数据,找到就返回,否则在往下一下个集合查找数据。

Request.Params["id"]

Request.Form["id"]

Request.QueryString["id"]

的用法以及区别?
Request.Params是所有post和get传过来的值的集合,Request.Form是取post传值, Request.QueryString是get传过来的

posted @ 2007-10-12 08:52 yuanws 阅读(56) | 评论 (0)编辑

早就期待着的Castle Project 1.0 RC3终于在开发几乎1年后发布了。从Castle Project网站的通告可以看到,新版本给开发人员带来了很多用于为.NET 2.0 Web应用程序而设计的MVC框架的新特性和增强功能。

InfoQ前不久采访过项目创始人Hamilton Verissimo。这个项目最后的一个版本是2006年11月发布的RC2,由于有1整年没有任何改变,所以现在新版本带来了太多的变化。

更新的功能包括:

ActiveRecord

  • 不需要扩展ARBase就能支持多数据集
  • 使用新的Castle Validation实现重构验证支持
  • InPlaceConfigurationSource.Build()
  • 添加HqlNamedQuery
  • 大量的错误修正

DynamicProxy

  • RC3第一次包含DynamicProxy 2(其支持泛型)
  • 比版本1快很多

MicroKernel/Windsor

  • 支持泛型集合
  • 转而使用DynamicProxy 2
  • 添加一些小功能到IKernel和IWindsorContainer的add/resolve方法中
  • 子容器支持得以提升,但是依旧需要一些检查——你可能会在编译的时候得到警告
  • 添加了一个很简单的计算(Eval)支持,你能进行配置
  • DefaultKernel 和 WindsorContainer现在都实现了IServiceProvider

MonoRail

  • 添加了缓存(Cache)支持(查看新的Cache属性)
  • 添加IsPost/IsGet/IsPut/IsHead到Controller
  • 添加自动窗体验证(Auto Form Validation)
  • FormHelper接近完美,依然缺乏多条选择的支持
  • 支持一次注册多个视图引擎(可以和混合视图引擎说拜拜了)——但是还不够好,在内部还有很多不协调的情况
  • 添加了少量视图组件
  • 添加测试控制器、视图组件、向导的支持,而无须使用ASP.NET
  • 添加了JS生成器支持,及UpdatePage/UpdatePageTag视图组件
  • Format支持set操作,例如$Form.Select(”price”, [1..100], “”)是用货币格式来显示选择的元素
  • 添加PaginationHelper.CreateCustomPage,其是处理分页最优化的方式
  • 添加DiggStylePagination视图组件,基于Alex Henderson运作
  • 添加了如下成员到SmartDispatcherController(和验证有关):ValidationSummaryPerInstance : IDictionary、GetErrorSummary(对象实例) : ErrorSummary、HasValidationError(对象实例) : bool
  • 添加ViewComponentDetails属性(就像ControllerDetails)
  • 添加ViewComponentParam属性,它可以告知MonoRail把参数作为属性绑定到你的视图组件上——减少了重复的代码规则
  • 添加UrlHelper/UrlBuilder概念

Aspect#

  • 已经发布

组件

 

  • 添加Castle.Validator
  • 添加Castle.DictionaryAdapter——对这个特性还有点拿不准
  • 加强了Binder(这是它的实现的另外一种重写代码)

其他

  • 创建了using.castleproject.org
  • 创建了api.castleproject.org
  • 在Castle.Services.Transaction和微软System.Transactions之间进行了初步集成
  • 创建了Castle.Core命名空间

posted @ 2007-10-09 17:49 yuanws 阅读(269) | 评论 (0)编辑

学习monorail中,感觉真是一个好东西,而且很多大型的项目也使用了这种模型,这无疑给我们提供了一个非常好的MVC模型,更高效的性能,和更简洁的制作。
微软好像也坐不住了准备年底推出 ASP.NET MVC Framework
这个框架将支持以下特性:
  • 为Controller提供原生的TDD模型支持
  • 支持ASPX作为一种视图引擎(没有ViewState和Postback)
  • 提供接口以使用其他的视图引擎,如MonoRail
  • 提供对Controller对象生成的IoC支持和依赖注入支持
  • 完全支持对URL和导航的控制
  • 整个框架的模块都可以插拔(pluggable )
  • 关注分离(Separation of concerns)
  • 与ASP.NET良好的集成
  • 同时支持静态和动态语言

posted @ 2007-10-09 16:05 yuanws 阅读(176) | 评论 (0)编辑

使用分页存储过程
Create  PROCEDURE ListPage(
@tblName  nvarchar(200),           ----要显示的表或多个表的连接
@fldName  nvarchar(200) = '*',          ----要显示的字段列表
@pageSize int = 10,                    ----每页显示的记录个数
@page  int = 1,           ----要显示那一页的记录
@pageCount int = 1 output,          ----查询结果分页后的总页数
@Counts int = 1 output,           ----查询到的记录数
@fldSort nvarchar(100) = null,          ----排序字段列表或条件
@Sort  bit = 0,           ----排序方法,0为升序,1为降序
@strCondition nvarchar(200) = null, ----查询条件,不需where
@ID  nvarchar(50)  ----主表的主键
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(1000)  ----存放动态生成的SQL语句
Declare @strTmp nvarchar(1000)  ----存放取得查询结果总数的查询语句
Declare @strID  nvarchar(1000)  ----存放取得查询开头或结尾ID的查询语句
Declare @sqlSort nvarchar(200)  ----存放临时生成的排序条件
Declare @intCounts int   ----要移动的记录数
Declare @BeginID int   ----开始的ID
Declare @EndID   int   ----结束的ID


--------首先生成排序方法---------
if @Sort=0  --升序
begin
   if not(@fldSort is null)
  set @sqlSort = ' Order by ' + @fldSort 
   else
  set @sqlSort = ' Order by ' + @ID 
end
else   --降序
begin
 if not(@fldSort is null)
  set @sqlSort = ' Order by ' + @fldSort + ' DESC'  
 else
  set @sqlSort = ' Order by ' + @ID + ' DESC '
end


--------生成查询语句--------
--此处@strTmp为取得查询结果数量的语句
if @strCondition is null --没有设置显示条件
 begin
 set @sqlTmp =  @fldName + ' From ' + @tblName
 set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName
 set @strID = ' From ' + @tblName
 end
else
 begin
 set @sqlTmp = + @fldName + 'From ' + @tblName + ' where ' + @strCondition
 set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName + ' where ' + @strCondition
 set @strID = ' From ' + @tblName + ' where ' + @strCondition
 end
 


----取得查询结果总数量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out

--取得分页总数
if @Counts <= @pageSize
 set @pageCount = 1
else
 set @pageCount = (@Counts / @pageSize) + 1


--计算要移动的记录数
if @page = 1
 set @intCounts = @pageSize
else
begin
 set @intCounts = (@page-1) * @pageSize + 1
end

-----取得分页后此页的第一条记录的ID
set @strID = 'select @BeginID=' + @ID + ' ' + @strID


set @intCounts = @intCounts - @pageSize + 1
set rowcount  @intCounts
exec sp_executesql @strID,N'@BeginID int out ',@BeginID out

-----取得分页后此页的最后一条记录的ID
set @intCounts = @intCounts + @pageSize - 1
print @intCounts
set rowcount  @intCounts
exec sp_executesql @strID,N'@BeginID int out ',@EndID out


------恢复系统设置-----
set rowcount  0
SET NOCOUNT OFF

------返回查询结果-----
if @strCondition is null
 set @strTmp = 'select ' + @sqlTmp + ' where ' + @ID + ' between ' + str(@BeginID) + ' and ' + str(@EndID)
else
 set @strTmp = 'select ' + @sqlTmp + ' where ' + @ID +' (between ' + str(@BeginID) + ' and ' + str(@EndID) + ')  and ' + @strCondition

if not(@sqlSort is null)
set @strTmp = @strTmp + @sqlSort
exec sp_executesql @strTmp

posted @ 2007-09-29 11:38 yuanws 阅读(37) | 评论 (0)编辑

     摘要: 使用oracle的一点心得 有不对的地方还请大家指出创建表时注意事项:1. 表名和列名使用有意义且容易记忆的英文单词2. 表名大写,列名大写,统一使用下划线3. 使用单数名称定义列名。4. 创建良好的关系。创建查询时注意事项:1. select ,from , where .,order by, having,group by 正文中采用小写2. IN,BETWEEN,UPPER 和函数等采用大写... 阅读全文

posted @ 2007-09-24 17:12 yuanws 阅读(382) | 评论 (1)编辑

 微软的示例中是点击一个按钮实现效果,而且AnimationExtender要绑定这个按钮
   在gridview的行中的按钮可是跟行一样多,而且还得确保每次AnimationExtender显示的内容不一样
  以下是实现方法。
1. 上来当然还是把控件添到网页
<cc1:AnimationExtender ID="AnimationExtender1"  runat="server" TargetControlID="Button2">
         <Animations>
                <OnClick>
                    <Sequence>
                       
                        <EnableAction Enabled="false" />
                       
                       
                        <ScriptAction Script="Cover($get('ctl00_SampleContent_btnInfo'), $get('flyout'));" />
                       
                       
                       
                        <ScriptAction Script="Cover($get('flyout'), $get('info'), true);" />
                        <StyleAction AnimationTarget="info" Attribute="display" Value="block"/>
                        <FadeIn AnimationTarget="info" Duration=".2"/>
                       
                       
                       
                        <Parallel AnimationTarget="info" Duration=".5">
                            <Color PropertyKey="color" StartValue="#666666" EndValue="#FF0000" />
                            <Color PropertyKey="borderColor" StartValue="#666666" EndValue="#FF0000" />
                        </Parallel>
                        <Parallel AnimationTarget="info" Duration=".5">
                            <Color PropertyKey="color" StartValue="#FF0000" EndValue="#666666" />
                            <Color PropertyKey="borderColor" StartValue="#FF0000" EndValue="#666666" />
                            <FadeIn AnimationTarget="btnCloseParent" MaximumOpacity=".9" />
                        </Parallel>
                    </Sequence>
                </OnClick></Animations>
        </cc1:AnimationExtender>
        <cc1:AnimationExtender id="CloseAnimation" runat="server" TargetControlID="btnClose">
            <Animations>
                <OnClick>
                    <Sequence AnimationTarget="info">
                        <%--  Shrink the info panel out of view --%>
                        <StyleAction Attribute="overflow" Value="hidden"/>
                        <Parallel Duration=".3" Fps="15">
                            <Scale ScaleFactor="0.05"  ScaleFont="true" FontUnit="px" />
                            <FadeOut />
                        </Parallel>
                       
                        <%--  Reset the sample so it can be played again --%>
                        <StyleAction Attribute="display" Value="none"/>
                        <StyleAction Attribute="width" Value="95%"/>
                        <StyleAction Attribute="height" Value=""/>
                        <StyleAction Attribute="fontSize" Value="12px"/>
                        <OpacityAction AnimationTarget="btnCloseParent" Opacity="0" />
                       
                        <%--  Enable the button so it can be played again --%>
                        <EnableAction AnimationTarget="Button2" Enabled="true" />
                    </Sequence>
                </OnClick>
                <OnMouseOver>
                    <Color Duration=".2" PropertyKey="color" StartValue="#FFFFFF" EndValue="#FF0000" />
                </OnMouseOver>
                <OnMouseOut>
                    <Color Duration=".2" PropertyKey="color" StartValue="#FF0000" EndValue="#FFFFFF" />
                </OnMouseOut>
             </Animations>
        </cc1:AnimationExtender>

和AnimationExtender1关联的按钮TargetControlID="Button2" 我用样式把他隐藏
<asp:Button ID="Button2" OnClientClick="return false;" runat="server" Text="Button" style="visibility:hidden;" />

接下来是添加gridview
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
     <asp:HiddenField ID="HiddenField1" runat="server" />
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
             Width="655px" SkinID="GridView" OnRowDataBound="GridView1_RowDataBound" PageSize="15" OnPageIndexChanging="GridView1_PageIndexChanging" OnDataBound="GridView1_DataBound">
            <Columns>
                <asp:TemplateField HeaderText="日期">
                    <EditItemTemplate>
                    </EditItemTemplate>
                   
                    <ItemTemplate><asp:LinkButton ID="LinkButton 3" Text='<%#Eval("l_date","{0:d}")%>' CommandArgument='<%#Eval("id") %>' runat="server" OnClick="LinkButton 3_Click" OnClientClick="javascript:document.getElementById('Button2').click();" CausesValidation="False"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="添加时间">
                    <EditItemTemplate>
                    </EditItemTemplate>
                     <ItemStyle Width="150px" HorizontalAlign="Center" />
                    <ItemTemplate>
                 <asp:Label ID="Label1" runat="server" Text='<%# Bind("l_adddate") %>'></asp:Label>
                 </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="批阅">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("l_sid") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("l_reply") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="30px" ForeColor="Red" HorizontalAlign="Center" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="修改" ShowHeader="False">
                    <ItemStyle Width="30px" />
                    <ItemTemplate>
                       <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%#string.Format("log_add.aspx?id={0}",Eval("id")) %>'>修改</asp:HyperLink>
                </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="删除" ShowHeader="False">
                    <ItemStyle Width="30px" />
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="false" CommandName="del"  CommandArgument='<%# Eval("id") %>'    Text="删除" OnClientClick='return confirm("确定删除?");' OnClick="LinkButton2_Click"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>

主要是蓝色标记的那部分,当然后台事件自己写
还少点东西就是那个div 在把他们拷近来就可以了
<div id="flyout" style="display: none; overflow: hidden; z-index: 2; background-color: #FFFFFF; border: solid 1px #D0D0D0;"></div>
       
        <!-- Info panel to be displayed as a flyout when the button is clicked -->
        <div id="info" style="display: none; width:95%; z-index: 2; opacity: 0; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); font-size: 12px; border: solid 1px #CCCCCC; background-color: #F3F3F3; padding: 5px; left: 10px; position: absolute; top: 10px;">
            <div id="btnCloseParent" style="float: right; opacity: 0; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);">
                <asp:LinkButton id="btnClose" runat="server" OnClientClick="return false;" Text="X" ToolTip="Close"
                    Style="background-color: #666666; color: #FFFFFF; text-align: center; font-weight: bold; text-decoration: none; border: outset thin #FFFFFF; padding: 5px;" />
            </div>
            <div>
               <asp:UpdatePanel ID="UpdatePanel2" runat="server">
            <ContentTemplate> <table width="98%" border="0" align="center" cellpadding="3" cellspacing="1" class="table">
 <tr class="hback">
  <td  class="xingmu" >
            日志:<asp:Label ID="l_date" runat="server" Text="Label"></asp:Label>&nbsp; --&nbsp;
            <asp:Label ID="u_name" runat="server" Text="Label"></asp:Label></td>
           </tr>
</table>
</ProgressTemplate>
        </asp:UpdateProgress>

 </div>
        </div>

至此结束!

posted @ 2007-09-07 10:46 yuanws 阅读(627) | 评论 (8)编辑

把图片地址换成你自己的图片就可以了

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>像163网站顶部展出的大幅广告</title>
   <script type="text/javascript" language="javascript">
    var time = 500;
    var h = 0;
    function addCount()
    {
        if(time>0)
        {
            time--;
            h = h+5;
        }
        else
        {
            return;
        }
        if(h>=500)  //高度
        {
            return;
        }
        document.getElementById("ads").style.display = "";
        document.getElementById("ads").style.height = h+"px";
        setTimeout("addCount()",30);
    }
   
    window.onload = function showAds()
    {
        addCount();
        setTimeout("noneAds()",8000); //停留时间自己适当调整
    }
    </script>
   
    <script type="text/javascript" language="javascript">
    var T = 500;
    var N = 500; //高度
    function noneAds()
    {
        if(T>0)
        {
            T--;
            N = N-5;
        }
        else
        {
            return;
        }
        if(N<=0)
        {
            document.getElementById("ads").style.display = "none";
            return;
        }
       
        document.getElementById("ads").style.height = N+"px";
        setTimeout("noneAds()",30);
    }
    </script>
</head>
<body>
    <form id="form1" runat="serv