卡西卡的小寶庫
寶庫寶庫寶庫

ASP.NET 1.1及2.0的RegularExpressionValidator都無法指定是否區分大小寫(RegexOptions.IgnoreCase)。

要檢查上傳的副檔名,其正規表示式如下
^[a-zA-Z]:(\\.+)(\.pps|\.sql|\.dat)$  

為處理大小寫須改成
^[a-zA-Z]:(\\.+)(\.[pP][pP][sS]|\.[sS][qQ][lL]|\.[dD][aA][tT])$

可用程式
filter = "\.ppt|\.sql|\.dat";
for ( int i='a'; i<='z' ; i++ )
{
  string ls = new string((char)i,1);
  string us = new string((char)(i-32),1);
  filter = filter.Replace(ls,"["+ls+us+"]");
} // for
RegularExpressionValidator1.ValidationExpression = @"^[a-zA-Z]:(\\.+)("+filter+")$";

 

目標:由playlist.mp3控制播放內容(可空或多首),播完10秒後重新載入本頁。

說明:

  1. playlist.mp3可以是真的mp3音樂檔,或是內容為多首mp3網址(一行一首)的文字檔。
  2. playlist.mp3的內容由server端控制,可依警報或時間或隨機產生內容。
[body]
<OBJECT id=player type=application/x-oleobject height=1 width=1
classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6' >
<PARAM NAME="URL" VALUE="playlist.mp3">
<PARAM NAME="rate" VALUE="1">
<PARAM NAME="playCount" VALUE="1">
<PARAM NAME="autoStart" VALUE="true">
<PARAM NAME="baseURL" VALUE="">
<PARAM NAME="volume" VALUE="100">
<PARAM NAME="mute" VALUE="0">
<PARAM NAME="uiMode" VALUE="none">
</OBJECT>
[/body]

接收PlayStateChange[msdn]事件

[script]
window.onload = function() {
  var player = document.getElementById('player');
  player.attachEvent("playstatechange",MediaPlayer_playStateChange);
}
function MediaPlayer_playStateChange(newState) {
  if ( newState == 10/*Ready*/ ) {
    // 10秒後重新載入
    window.setTimeout("document.location.reload();", 1000*10);
  } // if
}
[/script]

參考資料:

  • Windows Media Player Reference - W3Schools
  • Using the Windows Media Player Control with Firefox - MSDN
  • Player.playState - MSDN
    Value State Description
    0 Undefined Windows Media Player is in an undefined state.
    1 Stopped Playback of the current media item is stopped.
    2 Paused Playback of the current media item is paused. When a media item is paused, resuming playback begins from the same location.
    3 Playing The current media item is playing.
    4 ScanForward The current media item is fast forwarding.
    5 ScanReverse The current media item is fast rewinding.
    6 Buffering The current media item is getting additional data from the server.
    7 Waiting Connection is established, but the server is not sending data. Waiting for session to begin.
    8 MediaEnded Media item has completed playback.
    9 Transitioning Preparing new media item.
    10 Ready Ready to begin playing.
    11 Reconnecting Reconnecting to stream.
  • ASX Elements Reference - MSDN
    Advanced Stream Redirector (ASX) files are based on the Extensible Markup Language (XML) syntax, and are made up of various elements with their associated tags and attributes.

 

[JS]取消事件

Posted In: , . By 卡西卡

重點:

  • Firefox沒有window.event的物件,必須透過addEventListener才能把event當成參數傳入function中。

可共用:

IE可用:

Firefox可用:

[SCRIPT]
window.onload = function() {
  addEvent(document.getElementById("form1"), "submit", checkForm);
}

function checkForm(e) {
  var obj = null;
  if ( e.srcElement ) {
    obj = e.srcElement;
  } // if
  else if ( e.target ) {
    obj = e.target;
  } // else if

  // 取消submit
  cancelEvent(e);
}

function cancelEvent(e)
{
  if ( e && e.preventDefault ) {
    // Firefox
    e.preventDefault();
    e.stopPropagation();
  } // if
  else {
    // IE
    e.cancelBubble=true;
    e.returnValue = false;
  } // else
  return false;
}

function addEvent(obj, evType, fn)
{
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, false);
    return true;
  } // if
  else if (obj.attachEvent) {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } // else if
  else {
    return false;
  } // else
}
[/SCRIPT]
另一種方法: [SCRIPT]
function fnTest(evt) {
  evt=evt?evt:(window.event?window.event:null);
  printObject(evt);
}
function printHTML(str) {
  var div = document.getElementById('divMsg');
  div.innerHTML = str;
}
function printObject(obj) {
  var s = "";
  for(att in obj) s += ("<li>"+att+"="+obj[att]+"</li>");
  printHTML("<ol>"+s+"</ol>");
}
[/SCRIPT]
[BODY]
<input type="button" id="btnSave" value="TEST" onclick="fnTest(event);"/>
<div id="divMsg">divMsg</div>
[/BODY]

參考資料:

 

可共用:

  • obj.innerHTML

IE可用:

  • outerHTML
  • innerText

Firefox可用:

  • textContent
[SCRIPT]
function print(str) {
  var div = document.getElementById('divMsg');
  if ( div.innerText ) {
    // IE
    div.innerText = str;
  } // if
  else {
    // FireFox
    div.textContent = str;
  } // else
}
function printHTML(str) {
  var div = document.getElementById('divMsg');
  div.innerHTML = str;
}
[/SCRIPT]

 

[JS]getAttribute

Posted In: , . By 卡西卡

可共用:

IE可用:

  • obj.msg, obj['msg']
[SCRIPT]
function fnTest() {
  var obj = document.getElementById('txtStr');
  var msg = obj.getAttribute("msg");
  print(obj.id+'='+obj.value+','+msg );
}
[/SCRIPT]

[BODY]
<form>
<input type="text" id="txtStr" value="123-Abc" msg="測試" />
<input type="button" id="btnSave" value="TEST" onclick="fnTest();"/>
<br />
<div id="divMsg">divMsg</div>
</form>
[/BODY]

 

主要是用WScript.Shell是讀寫Registry的值。
若發生「 Automation 伺服程式無法產生物件」的錯誤就要調整IE的安全性設定,將「起始不標示為安全的ActiveX控制項」設定為啟用或提示。

<script language="javascript"> // 列印 function fnPrint() { try { // 儲存原本頁首頁尾的設定,然後設定空白 var ret = saveAndClearSetting(); // 列印 window.print(); // 回存原本頁首頁尾的設定 if ( ret ) restoreSetting(); } catch (e) { alert("err="+e.description); } } var hkey_path = "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; var hkey_key_header = hkey_path+"header"; // 頁首 var hkey_key_footer = hkey_path+"footer"; // 頁尾 var hkey_key_margin_bottom = hkey_path+"margin_bottom"; // 邊界(下) var hkey_key_margin_left = hkey_path+"margin_left"; // 邊界(左) var hkey_key_margin_right = hkey_path+"margin_right"; // 邊界(右) var hkey_key_margin_top = hkey_path+"margin_top"; // 邊界(上) var old_header = "&w&b第 &p 頁,共 &P 頁"; var old_footer = "&u&b&d"; // 儲存原本頁首頁尾的設定,然後設定空白 function saveAndClearSetting() { try { var RegWsh = new ActiveXObject("WScript.Shell"); old_header = RegWsh.RegRead(hkey_key_header); old_footer = RegWsh.RegRead(hkey_key_footer); RegWsh.RegWrite(hkey_key_header,""); RegWsh.RegWrite(hkey_key_footer,""); return true; } catch (e) { if ( e.description.indexOf("伺服程式無法產生物件") != -1 ) { alert("請調整IE瀏覽器的安全性\n網際網路選項\安全性\自訂層級\n「起始不標示為安全的ActiveX控制項」設定為啟用或提示。"); } // if else { alert("ERR="+e.description); } // else } // catch return false; } // 回存原本頁首頁尾的設定 function restoreSetting() { try { var RegWsh = new ActiveXObject("WScript.Shell"); RegWsh.RegWrite(hkey_key_header,old_header); RegWsh.RegWrite(hkey_key_footer,old_footer); } catch (e) { if ( e.description.indexOf("伺服程式無法產生物件") != -1 ) { alert("請調整IE瀏覽器的安全性\n網際網路選項\安全性\自訂層級\n「起始不標示為安全的ActiveX控制項」設定為啟用或提示。"); } // if else { alert("ERR="+e.description); } // else } // catch } </script>
http://klcintw4.blogspot.com/2007/09/javascriptie.html

 

客戶今天在MS更新後,原本正常的ASP.NET網站整個不能用,在事件檢視器裡有1007和1084的記錄。

http://support.microsoft.com/kb/835387/zh-tw

MessageId = 1007
由於在組態檔的 processModel 區段中提供了無效的使用者名稱和 (或) 密碼,所以無法啟動 aspnet_wp.exe 程式。.

MessageId = 1084
無法啟動 aspnet_wp.exe。. 這項失敗的錯誤碼為 %1。. 當背景工作處理序帳戶具有權限來讀取 . NET Framework 檔案不足時, 會發生這個錯誤。 請確定 .NET Framework 安裝正確,而且安裝目錄上的 ACL 允許存取設定的帳戶。

在GOOGLE搜一下,經實際測試後,整理如下:

  1. 移除KB886903的更新(如果有的話)
  2. 編輯[C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config]
    找到 <processModeluserName="machine" password="AutoGenerate" … />
    確定 userName是machine,password是AutoGenerate。
  3. 移除ASPNET的帳號
    執行 aspnet_regiis -i
    執行 iisreset

http://klcintw4.blogspot.com/2007/08/iis8000400510071084.html

 

[JS]電視網頁畫面切換

Posted In: . By 卡西卡


測試:
<script type="text/javascript" >
window.onload = Pages_Init;
</script>
<body>
<div id="MainPage">MainPage</div>
<div id="flash0" style="display:none;">flash0</div>
<div id="flash1" style="display:none;">flash1</div>
<div id="flash2" style="display:none;">flash2</div>
<script>new Page('MainPage',10);new Page('flash0',10);new Page('flash1',10);new Page('flash2',10);</script>
</body>

 

解法:SqlCommand.CommandTimeout[msdn] 加大,預設為30(秒)。

錯誤:SQL執行的時間太長就會發生 System.Data.SqlClient.SqlException。

ex
{"已超過連接逾時的設定。在作業完成之前超過逾時等待的時間,或者是伺服器未回應。" }
    [System.Data.SqlClient.SqlException]: {System.Data.SqlClient.SqlException}
    System.Object: {System.Data.SqlClient.SqlException}
    _className: null
    _COMPlusExceptionCode: -532459699
    _exceptionMethod: <未定義的值>
    _exceptionMethodString: null
    _helpURL: null
    _HResult: -2146232060
    _innerException: { }
    _message: "系統錯誤。"
    _remoteStackIndex: 0
    _remoteStackTraceString: null
    _source: null
    _stackTrace: {System.Array}
    _stackTraceString: null
    _xcode: -532459699
    _xptrs: 0
    HelpLink: null
    HResult: -2146232060
    InnerException: { }
    Message: "已超過連接逾時的設定。在作業完成之前超過逾時等待的時間,或者是伺服器未回應。"
    Source: ".Net SqlClient Data Provider"
    StackTrace: "   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)\r\n   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)\r\n   at System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)\r\n   at Textar.Klchang.Helper.SqlClient.DbBroker.QueryDS(String cmdText, CommandType cmdType, IDataParameter[] parameters) in d:\\project\\mmde\\core\\sqlclient3\\dbbroker.cs:line 436\r\n   at mmde.core.db.clsRptZ.RptZ02(DateTime COURSE_DATE1, DateTime COURSE_DATE2, DateTime VIEW_DATE1, Date
Time VIEW_DATE2) in d:\\project\\mmde\\web\\core\\db\\clsrptz.cs:line 56\r\n   at mmde.admin.reports.RptZ02.BindData() in d:\\project\\mmde\\web\\admin\\reports\\rptz02.aspx.cs:line 50"
    TargetSite: {System.Reflection.RuntimeMethodInfo}

其它:調整 SqlConnection.ConnectionString[msdn] (Connect Timeout, Connection Timeout)參數無效!

 

取得 IP, Hostname

Posted In: , , , . By 卡西卡

根據IP地址獲得主機名稱
// .NET 1.1 ~
System.Net.IPHostEntry host = System.Net.Dns.GetHostByAddress("192.168.0.1"); // [msdn]
Console.WriteLine(host.HostName);

// .NET 2.0 ~
System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry("192.168.0.1"); // [msdn]
Console.WriteLine(host.HostName);

取得本機IP
static void Main(string[] args)
{
  // 顯示主機名
  string hostname = Dns.GetHostName();
  Console.WriteLine("hostname = {0}", hostname);

  // 顯示每個IP地址
  IPHostEntry hostent = Dns.GetHostByName(hostname); // 主機信息
  IPAddress[] addrs = hostent.AddressList; // IP地址數組
  foreach ( IPAddress ip in hostent.AddressList )
  {
    Console.WriteLine("Address: {0}", ip);
  } // foreach
}
 

VB, VBA

 

MD5加密

Posted In: , . By 卡西卡

 

Base64 編解碼

Posted In: , , , , . By 卡西卡

C#

VB, VBA - 中文不支援

 

[SP]up_Desc

Posted In: , . By 卡西卡

類似Oracle的desc指令

CREATE PROCEDURE up_desc (
    @TABLE_NAME NVARCHAR(128)  -- 資料表名稱
)AS
SELECT COLUMN_NAME,
CASE DATA_TYPE
        WHEN 'char' THEN DATA_TYPE+'('+CONVERT(VARCHAR(10),CHARACTER_MAXIMUM_LENGTH)+')'
        WHEN 'varchar' THEN DATA_TYPE+'('+CONVERT(VARCHAR(10),CHARACTER_MAXIMUM_LENGTH)+')'
        WHEN 'nvarchar' THEN DATA_TYPE+'('+CONVERT(VARCHAR(10),CHARACTER_MAXIMUM_LENGTH)+')'
        WHEN 'numeric' THEN DATA_TYPE+'('+CONVERT(VARCHAR(10),NUMERIC_PRECISION)+','+CONVERT(VARCHAR(10),NUMERIC_SCALE)+')'
        ELSE DATA_TYPE END AS OBJECT_DATA_TYPE,
    B.value as [OBJECT_DESCRIPTION]
FROM [INFORMATION_SCHEMA].[COLUMNS] A
  LEFT JOIN ::fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'TABLE', @TABLE_NAME, 'COLUMN', default) B ON A.COLUMN_NAME=B.objname
WHERE TABLE_NAME=@TABLE_NAME
ORDER BY A.ORDINAL_POSITION

 

[SP]up_Obj

Posted In: , . By 卡西卡

尋找view,proc,func中有某個字串

CREATE PROC up_obj (
  @STR VARCHAR(100)
) AS

SELECT object_name(id) AS OBJNAME
FROM [syscomments]
WHERE [text] like '%'+@STR+'%'
ORDER BY object_name(id)

 

[SP]up_Select

Posted In: , . By 卡西卡

將資料表所有欄位組成SELECT句

CREATE PROCEDURE up_Select (
    @TABLE_NAME NVARCHAR(128) -- 資料表名稱
)AS
DECLARE @BUF NVARCHAR(1000)
DECLARE @COLUMN_NAME NVARCHAR(128)

SET @BUF=''

DECLARE curView CURSOR  FOR
    SELECT COLUMN_NAME
    FROM [INFORMATION_SCHEMA].[COLUMNS]
    WHERE TABLE_NAME=@TABLE_NAME

OPEN curView
FETCH curView
INTO @COLUMN_NAME

WHILE @@FETCH_STATUS = 0
    BEGIN -- WHILE
        SELECT @BUF=@BUF + @COLUMN_NAME + ','
        FETCH curView INTO @COLUMN_NAME
    END -- WHILE

CLOSE curView
DEALLOCATE curView

IF Len(@BUF)>0
BEGIN
    SELECT @BUF = LEFT(@BUF,LEN(@BUF)-1)
    PRINT 'SELECT'
    PRINT @BUF
    PRINT 'FROM ['+@TABLE_NAME+']'
END
ELSE
    PRINT '(none)'

 

[SP]up_RefreshView

Posted In: , . By 卡西卡

重整所有視表。
sp_refreshview [msdn]

CREATE PROCEDURE [up_RefreshView] AS
DECLARE @ViewName sysname

DECLARE curView CURSOR  FOR
    SELECT TABLE_NAME
    FROM [INFORMATION_SCHEMA].[TABLES]
    WHERE TABLE_TYPE='VIEW' AND [TABLE_SCHEMA]<>'INFORMATION_SCHEMA' AND SUBSTRING(TABLE_NAME,1,3)!='sys'

OPEN curView FETCH curView INTO @ViewName

WHILE @@FETCH_STATUS = 0
    BEGIN -- WHILE
        print @ViewName
        exec sp_refreshview @ViewName
        FETCH curView INTO @ViewName
    END -- WHILE

CLOSE curView
DEALLOCATE curView

 

Ping 1.1

Posted In: , . By 卡西卡

使用範例:
public class MainProc
{
 public static void Main(string[] argv)
 {
  // 測試
  bool ret = NetworkHelper.Ping(argv[0]);
  Console.WriteLine("Ping [{0}] = {1}", argv[0], ret);
 }
}
 

注意事項:

  • .NET 2.0 以上有Ping Class可以直接使用。[msdn]

參考資料:

 

ArcIMS - GET_FEATURES

Posted In: , . By 卡西卡

  •  GET_FEATURES 只能對Query, Feature, ArcMap 這3種Server送出。
  • 送出的Request編碼要設為big5才不會有中文亂碼。不能用UTF-8。

送出

  • LAYER:指定要查那一層
  • SPATIALQUERY:查詢條件
    • subfields:回傳的欄位,用空格分隔(如:ST_CODE ST_NAME)
      #ALL#, #SHAPE#
    • where:條件。<>符號要先編碼

回傳

 


GET_FEATURES
  • outputmode (binary, xml, newxml)
    binary表示傳及收都是compressed binary stream。
    newxml回傳型式如上面的例子。
    xml會傳回簡短型式的資料
    <FEATURE><FIELDS STCODE="466880" STNAME="板橋" /></FEATURE>
  • 加上featurelimit可以限制回傳的資料筆數
  • 加上beginrecord可以指定從第幾筆資料開始回傳。
  • 加上skipfeatures,true表示不傳細項,只回傳有幾筆資料。

subfields

  • #ALL#會回傳所有欄位。
  • 加上 #SHAPE# ,如:"#SHAPE# STCODE STNAME,會回傳:
    <FEATURE>
    <FIELDS>
    <FIELD name="STCODE" value="466900" />
    <FIELD name="STNAME" value="淡水" />
    <FIELD name="#SHAPE#" value="[Geometry]" />
    </FIELDS>
    <MULTIPOINT>
    <POINT x="293512.984729649" y="2784394.69179442"/>
    </MULTIPOINT>

    </FEATURE>

 

參考資料:

 

ArcIMS - GET_IMAGE

Posted In: , . By 卡西卡

.NET Link, ArcXML

相關DLL

  • ESRI.ArcIMS.Server.dll
  • ESRI.ArcIMS.Server.TCP.dll

重點在於將圖檔大小和地圖範圍填入XML中傳給ArcIMS Server,並解析回傳的結果。

送出

接收

參考資料:

http://gis.ascc.net/ISTIS/tools.html

 

GIS 座標轉換

Posted In: . By 卡西卡

http://jidanni.org/geo/taiwan_datums/

現代台灣地圖只會出現以下兩種座標:

  1. TWD67
    經緯度 longitude/latitude
    二度分帶 2-degree transverse Mercator
  2. TWD97/WGS84
    經緯度 longitude/latitude
    二度分帶 2-degree transverse Mercator

理想狀況是:圖資內含標示4種坐標,以便使用
現實情況是:大多數只標示1、2種,甚至完全沒有。

http://www.mobile01.com/topicdetail.php?f=130&t=374120

  • TWD67、TWD97是2種不同的橢球,具有不同的幾何因子
    所以在真實世界中的同一地點,會因為選用來標示的橢球不同
    而具有不同的經緯度、坐標。
  • 2度分帶是台灣地區使用的坐標投影方式之一
    將橢球坐標(經緯度)利用橫麥卡托投影投影到一平面上
    得到平面坐標 N (North)、E (East) (或 Y、X)。
淡水 121°26' 24" E 25°09' 56" N
經緯度 121.44 25.16555556
TM2 293512.984728072 2784394.69228671
Google Map , 台灣電子地圖服務網  跑到淡水河裡了 =.=a
  • 度=度+分/60+秒/3600
  • Google Earth只採用WGS 84的經緯度資料 [資料來源]
  • TM2之座標原點:X軸在121°E向西平移250000公尺,Y軸在赤道。
    293512是(距121°E 以東)(250-293)43公里又512公尺
    2784394是(距赤道)2784公里又394公尺
  • TWD67 與 TWD97 座標概略換算公式:
    TWD67 橫座標 = TWD97 橫座標 - 828 公尺
    TWD67 縱座標 = TWD97 縱座標 + 207 公尺

.NET 的座標轉換Library: OGL - Open GPS / LBS library

using OGL_Library;

GPSDatum g = new GPSDatum();
//Analysys
string[] s1 = g.ReturnAnalysisLongitude(Long);
// Long s1[0]=度,s1[1]=分, s1[2]=秒
string[] s2 = g.ReturnAnalysisLatitude(Lat);
// Lat s2[0]=度,s2[1]=分, s2[2]=秒

// result

string[] sx = g.WGS84toTM2(Long,Lat);
// TM2 sx[0]=TM2_X, sx[1]=TM2_Y

延伸閱讀:


CSV轉成SHP檔的小工具 xy2shp

  • CSV檔內不能有名為“ID”的欄位,會和產出的檔案衝突,而無法加入layer。
  • 載入CSV檔後指定XY的欄位,再按「Convert to Shp + KML File (WGS84 coordinate required)」
  • 會產出 .dbf, .kml, .shp, .shx四個檔案。

 

demo.aspx.cs

  • [5] 實作 ICallbackEventHandler [msdn] 介面
    將游標停在ICallbackEventHandler上,在第一個字的下方會出現小方塊(或按Shift-Alt-F10)可以出現實作介面的選項。
  • [12-15] 方法一,定義一個javascript function封裝callback function,適用較複雜的情況。
  • [16-19] 方法二,直接將callback function指定給button的onclick event,適用較簡單的情況。

demo.aspx

  • [5] function ClientCallback(result, content)
  • [9] function ClientErrorCallback(error, content)

demo.aspx [output]

  • [1, 9-12]由系統自動產生。
  • [2-5] 由方法一 RegisterClientScriptBlock 註冊產生
  • [8] WebForm_DoCallback 由方法二產生。

執行畫面:

  • 錯誤測試時,回傳的字串會多「0|」。
  • 按下C按鈕:fnTest→Test→WebForm_DoCallback…→…RaiseCallbackEvent…→…GetCallbackResult…→…ClientCallback

參考資料:

 

狀況1:轉成BaseClass時的差異

  • 使用obj2.MethodA時,是呼叫classB的MethodA
  • 使用classBase存取物件時,用new的classB是呼叫classBase的MethodA!

狀況2:三層繼承時

  • 編譯時,classC.MethodA會發生錯誤:「標記為 override 的成員 'ConsoleApplication1.test1.classC.MethodA()' 不能標記為 new 或 virtual」

狀況3:介面(interface)

狀況4:自訂屬性(Custom Attributes)

狀況5:泛型(Generic)


  • abstract [msdn]
    • 抽象類別
      • 抽象類別不能執行個體化。
      • 抽象類別可能會包含抽象方法和存取子。
      • 抽象類別不可能使用 sealed修飾詞來進行修改,這表示此類別不能繼承。
      • 衍生自抽象類別的非抽象類別必須包含所有繼承的抽象方法和存取子之實作。
    • 抽象方法、抽象屬性
      • 抽象方法宣告只允許在抽象類別裡。
      • 因為抽象方法宣告沒有提供實際的實作,因此並沒有方法主體,方法宣告僅以分號做為結束而且簽章 (Signature) 之後沒有大括號 ({ })。例如:
        public abstract void MyMethod();
      • 抽象方法宣告中使用 static 或 virtual 修飾詞是錯誤的。
    • 在靜態屬性上使用 abstract 修飾詞是錯誤的。
    • 可在衍生類別中覆寫抽象繼承屬性,方式是包含使用 override 修飾詞的屬性宣告。
  • virtual [msdn]
    • 不能與 static、abstract, private 或 override 等修飾詞一起使用
    • 在靜態屬性上使用 virtual 修飾詞是錯誤的
  • override [msdn]
    • 提供繼承自基底類別的成員新實作
    • 被覆寫的基底方法必須是 virtual、abstract 或 override
    • 不能變更 virtual 方法的存取範圍。override 方法和 virtual 方法都必須有相同的存取層級修飾詞。
    • 不能使用 new、static、virtual 或 abstract 等修飾詞修改 override 方法
  • new [msdn]
    • 當 new 關鍵字做為修飾詞時,會明確隱藏繼承自基底類別的成員。
    • 同時使用 new 和 override 會發生錯誤,因為這兩個修飾詞在意義上是互斥的。override 為繼承的成員擴充實作 (Implementation) 時,使用 new 可建立具有相同名稱的新成員,並將原來的成員隱藏起來。

參考資料:

 

Conditional Methods

Posted In: . By 卡西卡

效果:用 [Conditional("DEBUG")] 較佳

參考資料:

 

ASP.NET 2.0 新功能

Posted In: . By 卡西卡

  • 預設沒有命名空間
  • CodeBehind 2.0 (CodeBesid)
    • CodeBehind + Partical Class
    • Directive : CodeFile (1.0是 Codebehind)
  • 編譯模型(Compilation Mode)
    • 動態編譯(Dynamic Compilation)
    • 先行編譯(Precompilation)
  • 主版頁面(Master Page)
    • ContentPlaceHolder
    • App_Offline.htm 網站離線
  • 網站巡覽(Web Site Navigation)
    • TreeView
    • Menu
    • SiteMapPath
  • 組態管理API (Configuration API)
    • configuration
      • appSettings
      • connectionStrings
      • mailSettings
    • web.config 加解密
      • DataProtectionConfigurationProvider (DPAIP)
      • RSAProtectedConfigurationProvider (RSA)
      • aspnet_regiis.exe 程式
  • 網站管理
    • Login控制項, 帳號密碼,群組管理、Profile, Web part, 個人化
  • Theme, Style
  • GridView, DetailsView
  • DataSoruce
    • SqlDataSource, AccessDataSource, ObjectDataSource, XmlDataSource, SiteMapDataSource
  • Cross-Page Posting
    • PostBackUrl 屬性 (Button, LinkButton, ImageButton)
    • PreviousPage
    • @PreviousPageType, @Reference. (VirtualPath)
    • PreviousPage.IsCrossPagePostBack, IsPostBack, IsCallback
  • Classes
    • HtmlHead, HtmlMeta
  • Client Script
    • Focus (WebForm_AutoFocus)
    • <form defaultbutton=... defaultfocus=... />
    • <asp:Bubbon OnClientClick=... />
    • ClientScriptManager [msdn] (Page.ClientScript)
      • RegisterClientScriptBlock [msdn] / IsClientScriptBlockRegistered
        只有這個的script字串不用加<script></script>
      • RegisterClientScriptInclude [msdn] / IsClientScriptIncludeRegistered
      • RegisterOnSubmitStatement [msdn] / IsOnSubmitStatementRegistered
      • RegisterStartupScript [msdn] / IsStartupScriptRegistered
    • Client-Callback (Page.ClientScript)
      • GetCallbackEventReference [msdn]
      • ICallbackEventHandler [msdn] 實作
        • void RaiseCallbackEvent(string eventArgument); 
          處理以控制項為目標的回呼事件。
          • WebForm_InitCallback
          • WebForm_DoCallback
        • string GetCallbackResult(); 
          傳回以控制項為目標之回呼事件的結果。

 

jQuery 筆記

Posted In: . By 卡西卡

參考資料:jQuery API Rerence

選擇器(Selectors) more...

  • $("#div01"); /* document.getElementById("div01"); */
  • $("a[@name]").addClass("bg_green");
    尋找有name屬性的 <a />。
  • $('#div01 > p:first').addClass('red');
    尋找<div id='div01'>下的第一個<p />,first, last, 空就是全部的

屬性(Attributes) more...

  • $("#div01").addClass('red'); /* document.getElementById('div01').className='red'; */
  • $("#div01").css("border", "1px solid black");

其它

  • 在每一行後面加上文字
    $("#div01 ").find("p").each(function(i) {
      $(this).html( $(this).html() + " 加註(" + i + ")" );
    });

事件(Evnets) more...

  • 當mouse移過第一行時底色會變。
    $(document).ready(function() {
    $('#div01 > p:first').hover(
      function() {$(this).addClass("bg_green");},
      function() {$(this).removeClass("bg_green");}
    );
  • 當mouse移過每一行的<a/>時底色會變。
    $("a").hover(
      function() {$(this).parents("p").addClass("bg_red");},
      function() {$(this).parents("p").removeClass("bg_red");
    });
參考:http://www.k99k.com/jQuery_getting_started.html

 

作用:把 http://xxx/2007/10/03.aspx 轉到 http://xxx/list.aspx?y=2007&m=10&d=03

重點:HttpContext.RewritePath

 

URL=http://msdn2.microsoft.com/en-us/library/ms972974.aspx

by Scott Mitchell
Summary: Examines how to perform dynamic URL rewriting with Microsoft ASP.NET. URL rewriting is the process of intercepting an incoming Web request and automatically redirecting it to a different URL. Discusses the various techniques for implementing URL rewriting, and examines real-world scenarios of URL rewriting.

URL=http://www.codeproject.com/aspnet/URLRewriter.asp

By Richard Birkby
Demonstrates the use of regular expression-based URL Rewriting, similar to mod_rewrite with ASP.NET

  • Application_BeginRequest
  • Configuration Section Handlers

 

簡介:The NeatUpload ™ ASP.NET component allows  developers to stream uploaded files to storage (filesystem or database) and allows users to monitor upload progress.

URL=http://www.brettle.com/neatupload
Manual=http://www.brettle.com/NeatUpload-1.2/docs/Manual.html
DEMO=http://klchang3:99/demo/20070929A-Upload/WebForm1.aspx
CODE=D:\Project\_core2\NeatUpload\NeatUpload-1.2.24

  • UploadHttpModule.cs
    IHttpModule
  • ConfigSectionHandler.cs, Config.cs
    IConfigurationSectionHandler
  • DecoratedWorkerRequest.cs
    HttpWorkerRequest
  • Web.config
  • WebForm1.aspx
  • WebForm1.aspx.cs

 

類似的還有……

  • SlickUpload provides scalable ASP.NET upload handling with a rich progress and status information display. SlickUpload intercepts upload requests before ASP.NET can process them, enabling it to stream the files directly to the filesystem or a database with little overhead. For user feedback, SlickUpload provides information that can be displayed to the user in real time using AJAX techniques.
  • 炫Max - [ASP.NET 2.0] 上传进度模块\本模块可以分成两部分,一部分负责监测上传进度,另一部分负责显示。

 

CSS相容

Posted In: , . By 卡西卡

#example1 {
color:#FF0000; /*For Firefox*/
*color:#00FF00; /*For IE7 & IE6*/
_color:#0000FF; /*For IE6*/
/*注意順序*/
}

示範


#example { color: #FF0000; } /* Firefox */
*html #example { color: #00FF00; } /* IE7 & IE6 */
*+html #example { color: #0000FF; } /* IE6 */

示範


參考:http://www.arcbox.cn/zblog/post/36.html

 

字型

Posted In: . By 卡西卡

發光[IE]
<div style='padding:5px;width:100%;
FILTER: glow(color:#FF0000,strength=5);color:#000000;
font-size:12pt; font-weight:bold; font-family:Courier New'>示範 ABC</div></div>

示範 ABC
長度超過時把文字變成[IE]會變成...,[FF]會截掉
<div style='OVERFLOW: hidden; WIDTH: 150px; WHITE-SPACE: nowrap; TEXT-OVERFLOW: ellipsis'>
示範:為程式碼自動產生語法突顯(Syntax Hightlighting) 的功能</div>
為程式碼自動產生語法突顯(Syntax Hightlighting) 的功能
  • 不換行:white-space:nowrap
  • 無裝飾:text-decoration:none;
  • 置中:text-align: center;

 

開張

By 卡西卡

開張