2012年9月14日 星期五

[C# .Net] Client Side Call Server Side Method - Using PageMethods

Client 端要呼叫Server端的方法有許多方式,以下範列是用PageMethods來呼叫Server端的方法。

Client端的寫法:

 <script type="text/javascript">
function functionName() {
  PageMethods.serverFunctionName(param1,param2, onSuccess, onFail);
 }
 function onSuccess(response, context, method) {
  if (method == 'sendCommandToModifyChance') {
   alert(response);
  }
 }
 function onFail(response, context, method) {
  if (method == 'sendCommandToModifyChance') {
   alert("command sned error!");
  }
 }
     
</script>


Server 端的寫法:

[System.Web.Services.WebMethod]//一定要宣告成public static
 public static void serverFunctionName(param1,param2)
 {
            //do something
 }



注意事項:
1. Server端的方法上面要宣告[System.Web.Services.WebMethod]的標籤
2. 要被Client呼叫的方法一定要宣告成public static
3. 在<form>標籤下加入ScriptManager
form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>

2012年9月4日 星期二

[C# .Net] GridView 固定標頭

        要固定GridView標頭的這個功能我想是很多人需要用到的,尤其是資料量大的時候更顯得出它的重要。我想使用者並不會想要在看某筆資料時,還要拉到頂端看這欄位所代表的意思。

        固定GridView標頭的方式有很多種,最常用的應該是用CSS樣式來做這樣的效果。有的是使用JQuery方法很多種,最後筆者是選superTable來達到固定標頭的功能,而且還可以固定column剛好符合我的而求。最令我想用superTable的另一個原因是因為它可以跨Browser,在官網中就可以知道它所支援的Browser有 Firefox 2+, Internet Explorer 5.5+, Safari 3+, Opera 9+ and Chrome (Tested in Windows)


參考資料:
SuperTabl
SuperTable用法範例
JQuery用法
CCS樣式範例

2012年9月1日 星期六

[Information] 線上課程 Coursera

在線上學習大學的免費公開課程,而且還可以獲得學分證明喔!

想學習的人可以到Coursera的網站!


以下為coursera相關報導

[IT] TCP Protocol 和 IP Protocol 的功能簡介


IP(Internet Protocol):
用來處理封包的路徑選擇(Routing,簡稱路由)

TCP(Transmission Control Protocol):負責比較高層的功能,如分段(segmentation)、重組(reassembly) 及錯誤偵測(error detection)

[IT] What is gateway

gateway是一個中介的硬體,用來將資料(封包)一個網路傳送另一個網路

[Tool] Visual Studio 2010 Extension Tools

Productivity Power Tools
這工具裡面包含蠻多實用的功能,可參考下列網址

[C#] WeifenLuo的DockPanel 預設Float視窗的大小

Float視窗的預設大小可由dockPanel的屬性DefaultFloatWindowSize 來做設定

dockPanel1.DefaultFloatWindowSize = new System.Drawing.Size(width, height);



[C#] log4net 教學及使用範例 - RollingFileAppender

這個Appender會將Log以檔案的方式紀錄到指定的路徑下




<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <-- Log會寫在程式執行路徑下的Logs\LogFile.txt -->
      <file value="Logs\LogFile.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <!--日期的格式 yyyyMMdd-HHmm:Log會以分來切割資料-->
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="Date:%d%nThreadID:%t%nLevel:%level%nLogger:%logger%nLine:%l%nMessage:%message%nException:%exception%n%n" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
 
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
 
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
 
</configuration>

[C#] log4net 教學及使用範例 - SmtpAppender


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  
  <log4net>
    <!--
    This use SMTP to send mail.
    -->
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
      <to value="收件者Mail" />
      <from value="寄件者Mail" />
      <!-- 是否使用SSL加密 -->
      <EnableSsl value="true" />
      <username value="寄件者帳號" />
      <password value="寄件者密碼" />
      <subject value="主旨" />
      <!-- smtpHost 在此是以google的為範例 -->
      <smtpHost value="smtp.gmail.com" />
      <authentication value="Basic" />
      <port value="25" />
      <bufferSize value="512" />
      <lossy value="true" />
      <evaluator type="log4net.Core.LevelEvaluator,log4net">
        <threshold value="ERROR" />
      </evaluator>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="LogName:%c%nLevel:%level%nData:%date%nThreadID:%thread%nMSG:%message%nEX:%exception%n%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="WARN"/>
        <levelMax value="FATAL"/>
      </filter>
    </appender>
    
    <root>
      <level value="ALL" />
      <appender-ref ref="SmtpAppender" />
    </root>
    
  </log4net>
 
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
 
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
 
</configuration>

[C#] log4net 教學及使用範例 - ConsoleAppender


<?xml version="1.0"?>
<configuration>
  
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="Date:%d%nThreadID:%t%nLevel:%level%nLogger:%logger%nLine:%l%nMessage:%message%nException:%exception%n%n" />
      </layout>
      <!--輸出的Log層級在DEBUG和FATAL之間(只有INFO的LOG不會被輸出) -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG"/>
        <levelMax value="FATAL"/>
      </filter>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
  
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
</configuration>


[C#] log4net 教學及使用範例(一)


  1. 功能簡介
    :這裡講的log4net是一個很好用的open source code的組件。可以把你想輸出的log以不同的 格式輸出到不同的媒介
  2. 用途:主要用途當然就是要讓自己能夠在第一時間能夠很快又方便的找到Bug或者是自己想看的資訊。
  3. Log的分級:總共分成七級( 但實際可以在程式碼被呼叫的只有2-6級 )
    1. OFF - nothing gets logged (cannot be called)
    2. FATAL。
    3. ERROR
    4. WARN
    5. INFO
    6. DEBUG
    7. ALL - everything gets logged (cannot be called)
  4. 組態設定
    1. Root :
          所有的Log都繼承自root,所以預設的level為INFO,表示DEBUG層級的資訊預設

      <root>
            <level value="INFO" />
            <appender-ref ref="RollingFileAppender" />
            <appender-ref ref="SmtpAppender" />
            <appender-ref ref="ConsoleAppender" />
      </root>
      
    2. ConfigSections:
          這個標籤要放在 <configuration> 標籤下的第一個位置,不然會出錯。
      <configSections>
          <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
    3. Appender:
       指定要用那一種方式寫入Log。下面的例子便是把Log輸出到Console的表示法。
      <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      
    4. Layout:
          Log輸出的格式。
      <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="Date:%d%nThreadID:%t%nLevel:%level%nLogger:%logger%nLine:%l%nMessage:%message%nException:%exception%n%n" />
            </layout>
      
    5. Conversion Pattern:
          把Value的值轉換成Log資料。Value中的變數如下:

          %m(message):輸出的Log訊息,如ILog.Debug(message)輸出的一條消息
          %n(new line):換行
          %d(datetime):輸出當前语句運行的時間
          %r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數
          %t(thread id):當前語句所在的執行序ID
          %p(priority): 日志的當前優先級别,即DEBUG、INFO、WARN…等
          %level:錯誤層級
          %c(class):當前Log對象的名稱
          %L(line):輸出語句所在的行號
          %F(file):輸出語句所在的文件名
          %-數字:表示該項的最小長度,如果不夠,則用空格填充
    6. Filters
          用來過濾Log,過濾方式可依照Log level 或依Log字串....等等方式。
          (注意:
       filter的條件一定要在layout之後才有作用 )
          過濾的方式如下:
      1. StringMatchFilter
      2. LevelRangeFilter
      3. LevelMatchFilter
      4. DenyAllFilter
  5. 以下為一個簡單的組態設定的寫法,下次有空時再補上其它資料:
    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <log4net>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="LogName:%c%nLevel:%level%nData:%date%nThreadID:%thread%nMSG:%message%nEX:%exception%n%n" />
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN"/>
            <levelMax value="FATAL"/>
          </filter>
     </log4net>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
      </startup>
      <system.web>
        <membership defaultProvider="ClientAuthenticationMembershipProvider">
          <providers>
            <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
          </providers>
        </membership>
        <roleManager defaultProvider="ClientRoleProvider" enabled="true">
          <providers>
            <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
          </providers>
        </roleManager>
      </system.web>
    </configuration>