十、 關於JavaScript
-1、 使用熱鍵
<body onkeydown="if(event.keyCode==13)query_data()">
0、 調用JS彈出對話方塊
Page.Response.Write("<script language=javascript>alert('密碼錯誤!');window.history.back(-1);</script>");
Page.Response.End();
1、 調用JS程式要把"()"加上,例如:checkinput()
2、 在HTML中調用JS的代碼片如下:
<script language="javascript">
function closeWnd()
{
window.close();
}
</script>
<input type="button" value='關閉' onclick='closeWnd()'>
3、 關於Document對象的使用:如果你的表單(名稱是Form1)中有一個控制項(名稱是Keyword)那麼,引用方法為: Document.form1.Keyword.value
4、 相關樣本見test_js.sln項目
5、 使用狀態條:
<a href="tpage.htm" onMouseOver="window.status='Just another stupid link...'; return true">
input type="button" name="look" value="?" onclick="statbar('這是狀態條喔
(statusbar) !');">
<input type="button" name="erase" value="d)" onclick="statbar('');">
6、使用日期的例子:
<script language="LiveScript">
<!-- Hiding
today = new Date()
document.write("?( ??/ ",today.getHours(),":",today.getMinutes())
document.write("<br>?) ?- : ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
// end hiding contents -->
</script>
7、產生隨機數
<script language="LiveScript">
function RandomNumber() {
today = new Date();
num = Math.abs(Math.sin(today.getTime()));
return num;
}
</script>
8、開啟一個新視窗:
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no') //這句要寫成一行
-->
</SCRIPT>
參數解釋:
<SCRIPT LANGUAGE="javascript"> js指令碼開始;
window.open 彈出新視窗的命令;
'page.html' 快顯視窗的檔案名稱;
'newwindow' 快顯視窗的名字(不是檔案名稱),非必須,可用空''代替;
height=100 視窗高度;
width=400 視窗寬度;
top=0 視窗距離螢幕上方的象素值;
left=0 視窗距離螢幕左側的象素值;
toolbar=no 是否顯示工具列,yes為顯示;
menubar,scrollbars 表示功能表列和滾動欄。
resizable=no 是否允許改變視窗大小,yes為允許;
location=no 是否顯示地址欄,yes為允許;
status=no 是否顯示狀態列內的資訊(通常是檔案已經開啟),yes為允許;
</SCRIPT> js指令碼結束
9、自動關閉視窗
<script language="JavaScript">
function closeit()
{
setTimeout("self.close()",10000) //毫秒
}
</script>
10、開啟視窗之Cookies
回想一下,上面的快顯視窗雖然酷,但是有一點小毛病(沉浸在喜悅之中,一定 沒有發現吧?)比如你將上面的指令碼放在一個需要頻繁經過的頁面裡(例如首頁),那麼每次重新整理這個頁面,視窗都會彈出一次,是不是非常煩人?:-(
有解決的辦法嗎?Yes! Follow me.我們使用cookie來控制一下就可以了。
首先,將如下代碼加入首頁面HTML的<HEAD>區:
<script>
function openwin(){
window.open("page.html","","width=200,height=200")
}
function get_cookie(Name)
{
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if (offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1)
end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
function loadpopup()
{
if (get_cookie('popped')=='')
{
openwin()
document.cookie="popped=yes"
}
}
</script>
然後,用<body onload="loadpopup()">(注意不是openwin而是loadpop啊!)替換首頁面中原有的<BODY>這一句即可。你可以試著重新整理一下這個頁面或重新進 入該頁面,視窗再也不會彈出了。真正的Pop-Only-Once!
寫到這裡快顯視窗的製作和應用技巧基本上算是完成了!
11、前進後退和定位
<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>
12、Cookies全部搞定
<script language="JavaScript">
<!--
var bVisitedToday = false;
var lastVisit = GetCookie("lastVisit");
if (lastVisit != null)
{
lastVisit = 1 * lastVisit;
var lastHere = new Date(lastVisit);
var rightNow = new Date();
if(lastHere.getYear() == rightNow.getYear()
&& lastHere.getMonth() == rightNow.getMonth()
&& lastHere.getDate() == rightNow.getDate())
{
bVisitedToday = true;
}
}
if(bVisitedToday == false)
{
setLastlastVisitCookie();
window.location="http://www.thehungersite.com/"
}
else
{
//window.location="about:blank"
}
function getCookieVal (offset)
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (name, value)
{
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}
function setLastlastVisitCookie ()
{
var rightNow = new Date();
var expdate = new Date();
expdate.setTime (expdate.getTime() + 1 * (24 * 60 * 60 * 1000)); //+1 day
SetCookie ("lastVisit", rightNow.getTime(), expdate, "/");
}
function ResetCookie()
{
SetCookie("lastVisit", 0, null, "/");
}
// -->
</script>
十一、 Asp.net 中 頁面無重新整理的做法
asp中為了實現無重新整理,常常會將資料提交到隱藏架構中,在asp.net中
有一個很簡單的設定就可以實現
void Page_Load(Object sender, EventArgs e)
{
this.SmartNavigation = true;
}
或者直接寫在
<%@ Page language="c#" Codebehind="AllBook.aspx.cs" SmartNavigation = true AutoEventWireup="false" Inherits="wx.AllBook" %>
十二、 關於Asp的效能最佳化
前一段時間,因為工作需要,對一舊系統進行了效能最佳化。
環境描述如下:
1.該系統為以資訊為主要內容。採用asp實現表現層,資料庫採用MS SqlServer 2000 .
2.asp代碼混亂,並伴有許多錯誤,由於錯誤被屏蔽了,所以,系統才勉強可以使用。
3.所有的資料訪問直接通過在asp程式中編寫混合代碼實現,並在同一檔案中重複訪問同一張表。
針對以上情況,經過分析,確定一下原則,
1。將資料庫的處理和訪問邏輯全部寫到預存程序中。
2。asp只做顯示輸出的部分。
3。將原有的bug修正。
4。建立索引,並更改資料訪問的sql,注意要點有
1)Where 的條件需要將索引欄位的條件置前。
2)不允許出現count(*) ,以count(field1)取代。
3)不允許出現 select * 以select field1,field2 ...等代替
4)盡量不用IN ,採用exits替代
5) 對於單條的Insert Update和delete ,不採用事務,採用事務鎖定表,影響並發的效率,某些特殊情況還需要進行
強制不鎖表
with(nolock)
十三、 關於傳值(隱藏代碼方式)
1、在第一個頁的HTML中,確認Inherits屬性添加到@Page指令:
<%@ Page language="c#" Inherits="test_js.page1" %>
2、在第一個頁中建立一個Public的屬性
public string getName
{
get
{
return txtNumber.Text ;
}
}
3、添加傳送指令如下:
Server.Transfer ("edit.aspx");
4、第二個頁面HTML設定如下:
<%@ Reference Page="page1.aspx" %>
5、聲明第一個的變數
public page1 fp1;
6、引用方法
if (!this.IsPostBack )
{
fp1=(page1)Context.Handler ;
txtRc.Text =fp1.getName;
}
//this.IsPostBack方法用於測試頁面是否是回傳
7、完成!
十四、 Application的事件
<script language="C#" runat="server">
void Application_OnBeginRequest(Object sender, EventArgs E)
{
}
void Application_OnEndRequest(Object sender, EventArgs E)
{
}
</script>
十五、 Session的事件
void Session_OnStart()
{
Session["username"]="";//初始化參數
}
void Session_OnEnd()
{
}
十六、 在本視窗開啟頁面
onclick ="window.open('?addnew=true','_self','')"
十七、 關於DropDownList的資料繫結
drp_Tech.DataSource =ds.Tables["職員表"].DefaultView ;
drp_Tech.DataTextField ="技術員";
drp_Tech.DataBind ();
十八、 Table的使用
1、可以用width=100%來使Table填充表單的寬度
2、可以用<td colspan="3" align="center"> </td>來合并列,合并行用rowspan,Span的意思是跨度
十九、 DropDownList設定Item被選的方法
DropDownList2.Items.FindByText ("2").Selected =true;
二十、 在HTML中去掉多的邊框(整體)
leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
二十一、 用Java下載
<script language="javascript">
var strDownloadUrl = "http://g.china.msn.com/7MEZH_CN/ZH-CHS/SETUPDL.EXE";
function LaunchDownload(){location.href=strDownloadUrl;}
</script>
二十二、 滾動字的做法:
<marquee scrolldelay="180">歡迎登入海天客戶關係管理系統!</marquee>
二十三、 層
在Login.aspx中可以使用層來解決位置的問題
<div id="Layer1"style="BORDER-RIGHT: #000000 0px; BORDER-TOP: #000000 0px; LEFT: 28%; OVERFLOW: hidden; BORDER-LEFT: #000000 0px; WIDTH: 432px; BORDER-BOTTOM: #000000 0px; POSITION: absolute; TOP: 24%; HEIGHT: 282px; visibility: visible;"></div>
二十四、 關於XML
DataSet dsXml =new DataSet ("Settings");
string filepath=Server.MapPath ("\\xml\\set.xml");
dsXml.ReadXml(filepath);
DataGrid1.DataSource =dsXml;
Response.Write ("<br><br><br>第一個串連為:" + dsXml.Tables ["Set"].Rows[0]["ConnectionString1"].ToString ());
DataGrid1.DataMember ="Set";
DataGrid1.DataBind ();
二十五、 處理傳入的參數
http://mov.hzgwbn.com/movie.asp?addnew=true
在void Form_Load()中加入:
string _addnew=Request.QueryString ["addnew"];
二十六、 關於__dopostback()
看看這個吧,可能有用!!
<SCRIPT language="JavaScript">
<!-- Hide from older browsers
function GetInput()
{
input = prompt('input value that your want to send server:','');
if ((input) && (input!=""))
{
document.forms['Form1'].elements['Hidden1'].value = input;
__doPostBack('Button1', '');
}
}
// Stop hiding -->
</SCRIPT>
其中使用了__DoPostBack這個系統的用戶端函數,用來激發伺服器事件。
2、為了完成這個完整的頁面我們需要一個如下的Form
<form id="Form1" method="post" runat="server">
<INPUT id="Hidden1" type="hidden" name="Hidden1" runat="server">
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
</form>
請注意裡面的細節,這些都是運行在伺服器上的(runat=server)
3、接著就是伺服器端的代碼(cs檔案裡面的),Page_load函數使得伺服器控制項Button1可以在呈現到用戶端的時候具有onclick事件代碼如下:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置使用者代碼以初始化頁面
this.Button1.Attributes.Add("onclick","GetInput();");
}
4、最後就是按鈕的事件了,代碼如下,它將取到使用者輸入的一個值並且將這個值顯示在TextBox裡面,代碼如下:
private void Button1_Click(object sender, System.EventArgs e) {
string str = this.Hidden1.Value;
this.TextBox1.Text = str;
}
5、我自己的樣本
onclick="javascript:if(!confirm('ok')){return};__doPostBack('Button3','');"
6、注意:頁面上一定要有LinkButton或是別的可以有__doPostBack的控制項
二十七、 Toolbar
1、用Javascript處理
<script language="javascript">
function WitchB()
{if (event.srcNode!= null)
{
var bt=event.srcNode.getAttribute("id");
switch (bt)
{
case "C1":
aa();
break;
case "C2":
這裡調用.aspx.cs中的過程,這句話該怎麼寫,用__dopostback()????
break;
}
}
}
function aa()
{...}
</script>
<body onload="Toolbar1.onbuttonclick=WitchB;" MS_POSITIONING="GridLayout">
2、在C#中處理
private void Toolbar1_ButtonClick(object sender, EventArgs e)
{
Response.Write (sender.ToString ());
TextBox1.Text =sender.ToString ();
if(sender.ToString ()=="ToolbarButton - button1")
{
Response.Redirect ("http://localhost/htcrm");
}
}