ASP.NET 技巧三

 Javascript 获取浏览器窗口中文档(视口)可用尺寸的方法 

GridView显示数据,如果有边框的话,就把BorderWidth设为0,就没有边框了.

 GridView隐藏指定的列(AutoGeneratecolumns属性设为true的时候,同样适用)

Code


今天在用到lable显示数据库字段类型为text的内容时,界面发生了巨变,就是界面乱了,找不出是什么原因。竟然是text的内容里有tr td,才导致了这个问题,原来label也会解析html标签的。

DataList分页
前台

Code

 

asp.net弹出文件下载对话框
string contentType ="";
int i = filepath.LastIndexOf('.');
string str = filepath.Substring(i +1).ToUpper();
switch (str)
{
case"DOC":
contentType
="application/msword'";
break;
case"PDF":
contentType
="application/pdf";
break;
default: contentType ="application/ms-excel";
break;
}
HttpContext.Current.Response.Buffer
=false;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType
= contentType;
HttpContext.Current.Response.AddHeader(
"Content-Disposition", "attachment;filename="+ HttpUtility.UrlEncode(filepath));
HttpContext.Current.Response.WriteFile(filepath);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();

 

 

后台:

Code

 

无法在web服务器上启用调试。调试失败,因为没有启用Windows身份验证。

打开IIS,在IIS里查看站点信息(属性),选择“目录安全性”,点击“匿名访问和身份验证控制”右边的“编辑..”,选中“集成Windows身份验证”选项即可

 

取出日期中的时间部分:CONVERT(varchar(100), RequitalDate, 23)

 

DataList中嵌套DropDownList

Code

 

用display = "inline-block" 解决换行问题

如果用 display = "block",會造成換行

 

URL编码表

 

æ







退格
TAB
换行


回车


















空格
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
%00
%01
%02
%03
%04
%05
%06
%07
%08
%09
%0a
%0b
%0c
%0d
%0e
%0f
%10
%11
%12
%13
%14
%15
%16
%17
%18
%19
%1a
%1b
%1c
%1d
%1e
%1f
%20
%21
%22
%23
%24
%25
%26
%27
%28
%29
%2a
%2b
%2c
%2d
%2e
%2f
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
%30
%31
%32
%33
%34
%35
%36
%37
%38
%39
%3a
%3b
%3c
%3d
%3e
%3f
%40
%41
%42
%43
%44
%45
%46
%47
%48
%49
%4a
%4b
%4c
%4d
%4e
%4f
%50
%51
%52
%53
%54
%55
%56
%57
%58
%59
%5a
%5b
%5c
%5d
%5e
%5f
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~




ƒ




ˆ

Š

Œ

丒br>
%60
%61
%62
%63
%64
%65
%66
%67
%68
%69
%6a
%6b
%6c
%6d
%6e
%6f
%70
%71
%72
%73
%74
%75
%76
%77
%78
%79
%7a
%7b
%7c
%7d
%7e
%7f
%80
%81
%82
%83
%84
%85
%86
%87
%88
%89
%8a
%8b
%8c
%8d
%8e
%8f








˜

š

œ

丒br>Ÿ

¡
¢
£

\
|


©
ª
«
¬
¯
®
¯


²
³

µ

·
¸
¹
º
»
¼
½
¾
¿
%90
%91
%92
%93
%94
%95
%96
%97
%98
%99
%9a
%9b
%9c
%9d
%9e
%9f
%a0
%a1
%a2
%a3
%a4
%a5
%a6
%a7
%a8
%a9
%aa
%ab
%ac
%ad
%ae
%af
%b0
%b1
%b2
%b3
%b4
%b5
%b6
%b7
%b8
%b9
%ba
%bb
%bc
%bd
%be
%bf
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö

Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
%c0
%c1
%c2
%c3
%c4
%c5
%c6
%c7
%c8
%c9
%ca
%cb
%cc
%cd
%ce
%cf
%d0
%d1
%d2
%d3
%d4
%d5
%d6
%d7
%d8
%d9
%da
%db
%dc
%dd
%de
%df
%e0
%e1
%e2
%e3
%e4
%e5
%e6
%e7
%e8
%e9
%ea
%eb
%ec
%ed
%ee
%ef

 

 

模板页中客户端控件在输出的时候,其id是不变的,只有服务器端控件的id才会变。

ie 7和firefox中FileUpLoad控件的FileName和PostedFile.FileName是一样的,都是文件的文件名。

div里元素单行居中,设置line-height和height的值一样即可。

 

命令行打开IIS用inetmgr

IIS重启用iisreset

 

SQL Server 2005备份与还原数据库:

打开sql server 2005,选择要备份的数据库,然后点备份。

备份的时候,如果没选择路径会默认在数据库里的安装路径。

备份好之后,新建个目标数据库(用来还原的)此时你可以选择数据库要放在的路径,建好之后,点击还原。

目标数据库选择刚刚你建的数据库,然后源设备——》点击右边选择刚刚你备份的数据库路径,选择刚刚你备份好的数据库。

在选项界面:勾选覆盖现有数据库,选择原始文件名为你刚刚新建的数据库的路径。这样就好了。

 

在项目中,表如果牵涉到类型的,在读取数据的时候,不要在ItemDataBound里更换类型的值,这样很消耗数据库资源,可以在业务类库中,读取的数据里增加一列,保存类型的名称,这样前台页面就可以不用做处理了。

 

Hashtable中的key,不能进行排序,是.net本身进行排序,如果要想排序的话,就用dictionary<string,string>。

 

Div+CSS纵向菜单 

Code

 

查找DataList中的控件

Code

 

计算价格

前台:

Code

后台:onkeyup与onkeydown的区别是,文本框里的值改变时,onkeydown是读取的上一次值,onkeyup是读取的当前值。

Code

 

ASP.NET 防止重复提交

if (Request.Headers["Accept"] == "*/*")
        {
            return;
        }

 

原样输出html:

<换成&lt,>换成&gt

 

项目(类库)生成不成功,就把obj和bin里面的全部干掉,然后重新生成.

提示:无法找到该页
解决办法:在IIS管理器中``选择WEB服务扩展``点击"添加一个新的WEB服务扩展"``扩展名为 ASP.NET 2.0``点击添加按钮``选择C:\WINDOWS\Microsoft .NET\Framework\v2.0.50727\aspnet_isapi.dll```最后单击确定``

ASP.NET项目在重复名或直接备份时,.cs文件的文件名是不变的,所以在发布网站的时候,就会出错,把相同的类名删除掉就可以了。

 

  解决“此计算机上已安装了试用版。必须先卸载以前安装的试用版后才能安装另一个试用版。”
 删除 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CaretTracking

 

Fckedito编辑器,添加插入超链接

['Link','Unlink','Anchor'],

 

有disabled属性的html元素,在提表单的时候,它的值为空。

 

 

JS两种绑定方式
// function document.onkeydown()
// {
// FAutoComplete();
// }
document.onkeydown=FAutoComplete;

 

还剩5秒,页面将自动跳转到默认页面

代码
<script language="javascript" type="text/javascript">
var time=5;
function PageRedirect()
{
window.location.href
=$("#<%=hfUrl.ClientID%>").val();
if(timer1!=null)
{
window.clearInterval(timer1);
}
}
var i=0;
function dis()
{
$(
"#second").html('还剩'+(time-i)+"秒,页面将自动跳转到默认页");
i
++;
}
timer1
=setInterval('dis()', 1000);//显示时间
timer2=setTimeout('PageRedirect()',time *1000); //跳转
</script>

 

sql日期作比较的话,只能datetime类型的可比,varchar的不可以比。

 

JS倒计时(客户端的时间要正确)

代码
<script language="JavaScript" type="text/javascript">
<!--//
var ago=$("#ctl00_ContentPlaceHolder2_lblSpareTime").text();
ago
=ago.replace(/-/,","); //只替换第一个
ago=ago.replace(/-/,",");
ago
=ago.replace(//,",");
ago
=ago.replace(/:/,",");
ago
=ago.replace(/:/,",");
var agoseparate
=ago.split(',');

var EndTime
=new Date(agoseparate[0],eval(parseInt(agoseparate[1])-1),agoseparate[2],agoseparate[3],agoseparate[4],agoseparate[5]); //截止时间
function GetRTime() // 倒计时
{
var result;
var NowTime
=new Date();
var nMS
=EndTime.getTime() - NowTime.getTime();

var nD
=Math.floor(nMS/(1000*60*60*24));
var nH
=Math.floor(nMS/(1000*60*60)) %24;
var nM
=Math.floor(nMS/(1000*60)) %60;
var nS
=Math.floor(nMS/1000) %60;
if(nD>=0)
{
result
=nD+"";
result
+=nH+"小时";
result
+=nM+"";
result
+=nS+"";
$(
"#ctl00_ContentPlaceHolder2_lblSpareTime").text(result);
}
else
{
result
="已结束";
}
setTimeout(
"GetRTime()",1000);
}
if(agoseparate.length>4)
{
GetRTime();
}
// -->
</script>

 

IList与List,new时候的区别

代码
IList <int> list =new List <int>();
List
<int> list =new List <int>();
这两个有没有区别?

1、当你只想使用接口的方法时,这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.

2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现
List
<>是个类型 已经实现了IList <>定义的那些方法

IList
<Class1> IList11 =new List <Class1>();
List
<Class1> List11 =new List <Class1>();

这两行代码,从操作上来看,实际上都是创建了一个List
<Class1>对象的实例,也就是说,他们的操作没有区别。

只是用于保存这个操作的返回值变量类型不一样而已。

那么,我们可以这么理解,这两行代码的目的不一样。
List
<Class1> List11 =new List <Class1>();
是想创建一个List
<Class1>,而且需要使用到List <T>的功能,进行相关操作。

IList
<Class1> IList11 =new List <Class1>();
只是想创建一个基于接口IList
<Class1>的对象的实例,只是这个接口是由List <T>实现的。所以它只是希望使用到IList <T>接口规定的功能而已。

 

Linq对数据库增删改查

代码
publicpartialclass Default2 : System.Web.UI.Page
{
DataClasses3DataContext db
=new DataClasses3DataContext("server=.;database=ajaxnet;uid=sa;pwd=sa;");
protectedvoid Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
privatevoid BindData()
{
//var dt = from ajaxa in db.ajaxa
// where ajaxa.id > 10
// group ajaxa by ajaxa.name into g
// select g.Key; //只能得到一列
//this.GridView1.DataSource = dt;
System.Data.Linq.Table<ajaxa> ts = db.GetTable<ajaxa>();
this.GridView1.DataSource = ts.Where(p => p.id >40);

this.GridView1.DataBind();
}
protectedvoid Button1_Click(object sender, EventArgs e)
{
ajaxa dt
=new ajaxa();
dt.name
=this.TextBox1.Text;
dt.content1
=this.TextBox2.Text;
dt.sj
= DateTime.Now;
db.ajaxa.InsertOnSubmit(dt);
db.SubmitChanges();
BindData();
}
protectedvoid GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
int id = Convert.ToInt16(((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0])).Text.Trim());
string name = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.Trim();
string content1 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.Trim();
string sj = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.Trim();

var matches
= from ajaxa in db.ajaxa
where ajaxa.id == id
select ajaxa;
foreach (var category in matches)
{
category.name
= name;
category.content1
= content1;
//category.sj = "update new name" + sj;
}
db.SubmitChanges();
Response.Write(db.Log);
this.GridView1.EditIndex =-1;
BindData();
}
catch (Exception err)
{
Response.Write(err.Message);
}
}
protectedvoid GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
int id = Convert.ToInt16(GridView1.DataKeys[e.RowIndex].Value.ToString().Trim());
var matches
= from ajaxa in db.ajaxa
where ajaxa.id == id
select ajaxa;
db.ajaxa.DeleteAllOnSubmit(matches);
db.SubmitChanges();
this.BindData();
}
catch (Exception ex)
{
Response.Write(ex);
}
}
protectedvoid GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex
= e.NewEditIndex;
this.BindData();
}
protectedvoid GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex
=-1;
this.BindData();
}
}

 

代码
#region ??用法
// int num = null; //这样定义报错,无法将 Null 转换成“int”,因为它是一种不可为 null 值的类型
//int? num = null;
//if (num.HasValue == true)
//{
// Response.Write("num=" + num.Value);
//}
//else
//{
// Response.Write("num=Null");
//}
//int y = num.GetValueOrDefault();
//try
//{
// y = num.Value;
//}
//catch (System.InvalidOperationException err)
//{
// Response.Write(err.Message);
//}
//catch (System.Exception err)
//{
// Response.Write(err.Message);
// You can also use the == and != operators with a nullable type, for example, if (x != null) y = x;

//Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? -1;
#endregion

 

JS锚点定位

<a name="NN"></a>

普通定位方式是在地址后面加上#NN即可,现想通过JS实现定位,代码如下

window.location.hash="NN"

 

IE下form的提交,html元素一定要有name,不然不会提交。

 

GET、Post

本来以为自己以前用.NET搞过几次抓取网页的操作,比较了解webrequest,可今天丢出了一个“无法发送具有此谓词类型”异常,弄了半天搞不定,只好GOOGLE了再查 SDK文档。搞定后写写总结。

 
    如果要向指定的页面提交参数,webrequest提供了一个流,朝里面写就可以了

public virtual Stream GetRequestStream()
这里有两个地方注意下。第一,如果是以GET方式提交的话,参数直接写到WebRequest构造函数的URL里,如果是以POST方式提交,那就获取这个流,把参数写进流里,注意在写之前必须指定Method 为POST。第二,写入之后要关闭这个流。

 

js函数汉字转换传输

onclick="JumbotCms.Popup.show('commentedit.aspx?id={$T.record.id}&type='+encodeURIComponent('{$T.record.commenttype}')+'',500,270,false)"

接受时用HttpUtility.UrlDecode(q("type"));

 

vs2008发布失败

代码
vs发布失败原因
今天遇到了一个问题,用vs2008编译网站,能够编译通过,但是发布时显示发布失败,也没有具体失败的原因,

查了下原来是曾经在资源管理器中删除过这个项目下的某些无用文件,但是没有在vs中删除,这就导致了发布失败。

把那几个倒霉文件再从vs中删掉,问题解决。

增加:

今天又遇到了这个问题,但是查了全部文件,没有我上面说的那种无效文件,但仍然发布不成功。

这时大家可以打开view
---output(就是输出窗口)进行查看,就可以看到具体原因了。我这里是因为发布的目录没有权限,换了个目录就好了.

 

2010-5-7 17:46:01
今天用ajax在做评论列表的时候,就是页面载入完毕后,才开始加载留言编辑器,在本地一直可以work ,但是弄到服务器上的时候,高兴了就work,不高兴就不work,这种问题好像是最让人carzy,我不断的debug,最后发现错误可能是网络传输js的问题,在settimeout定时器里,我把interval设置了长一点,好像就可以了。no word to say!

 

给DropDownList绑定枚举

代码
Type sf =typeof(Maticsoft.BLL.tb_sysLog.LogType);
System.Reflection.FieldInfo[] fi
= sf.GetFields();
Dictionary
<int, string> dict =new Dictionary<int, string>();
for (int i =1; i < fi.Length; i++)
{
int key = (int)((Maticsoft.BLL.tb_sysLog.LogType)Enum.Parse(sf, fi[i].Name));
dict[key]
= fi[i].Name;
}
this.ddlLogType.DataSource = dict;
this.ddlLogType.DataTextField ="value";
this.ddlLogType.DataValueField ="key";
this.ddlLogType.DataBind();

 根据枚举的value得到前面的字符串 

Maticsoft.BLL.tb_sysLog.LogModule module = (Maticsoft.BLL.tb_sysLog.LogModule)Enum.Parse(typeof(Maticsoft.BLL.tb_sysLog.LogModule), lblModule.Text, true);

lblModule.Text = module.ToString();

 

测试端口开放

 static void Main(string[] args)
        {
            var port = 10000; //从10000开始

            for (int i = 0; i < 50; i++)
            {
                var last = port + 1000;
                int[] obj = new int[] { port, last };
                Thread thread = new Thread(TestPort);
                thread.Start(obj);
                port = last;
            }
            Console.Read();
        }

        private static void TestPort(object obj)
        {
            int[] port = obj as int[];
            int start = port[0];
            int end = port[1];

            Console.WriteLine("start:" + start + " end:" + end);
            for (int i = start; i <= end; i++)
            {
                try
                {
                    TcpClient tcpClient = new TcpClient();
                    tcpClient.Connect("127.0.0.1", i);
                    Console.WriteLine(i);
                }
                catch
                {
                    Console.Write(".");
                }
            }
        }

 

posted on 2009-08-18 11:18  几度夕阳红了  阅读(771)  评论(0编辑  收藏  举报