2014年2月6日星期四

[JavaScript] JavaScript考題

請問以下代碼運行結果為何?

function foo(){
foo.abc = function(){alert('def')}
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}
}
foo.prototype.abc = function(){alert('456');}
foo.abc = function(){alert('123');}
var f = new foo();
f.abc();
foo.abc();
abc();


 輸出為:
alert('xyz')
alert('def')


解釋:
var f = new foo(); 
//新建了一個foo對象,注意這時個上下文環境到了foo()中

f.abc();
//查找這個對象的abc()方法,輸出xyz,注意如果找不到就會去f.prototype裡找,到那時才會輸出456

foo.abc();
//在foo()中找到abc()方法,輸出def, 如果找不到會跳出foo() 到外面找到abc,輸出123

abc();
//在window中找到abc()方法,ie拋錯


 [Reference]
  http://jsfiddle.net/eMHY3/
  http://www.iteye.com/topic/268801

----------------------------------------------------
var b = function(b){ alert(b); }( function(){ alert(2); return '3'; }() );

結果為 ->2 ->3


2014年1月9日星期四

[Visual C#] 如何透過SMTP伺服器寄送郵件




public static bool Send(string To, string Subject, string Message, string From = "")

{

                using (System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage())

                {

                    if (String.IsNullOrEmpty(From))

                    {

                        message.From = new System.Net.Mail.MailAddress(Models.GlobalSettings.ServiceMail, Models.GlobalSettings.ServiceName);

                    }

                    else

                    {

                        message.From = new System.Net.Mail.MailAddress(From, From);

                    }

                    message.To.Add(To);

                    message.Subject = Subject;                  

                    message.Body = Message;

                    message.IsBodyHtml = true;

                    message.Priority = System.Net.Mail.MailPriority.Normal;



                    using (System.Net.Mail.SmtpClient mySmtp = new System.Net.Mail.SmtpClient(""mail.abc.com""))

                    {

                        System.Net.CredentialCache mycache = new System.Net.CredentialCache();

                        System.Net.NetworkCredential netcare = new System.Net.NetworkCredential(GlobalSettings.SMTPAuthUsername, GlobalSettings.SMTPAuthPassword,"mail.abc.com"); //設定帳號 密碼 與SMTP主機位置



                        mySmtp.Port = 25;

                        mySmtp.UseDefaultCredentials = false;

                        mySmtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

                        mySmtp.Credentials = netcare;

                        mySmtp.EnableSsl = false;

                        mySmtp.Send(message);

                        return true;

                    }

                }

   }







Reference :

http://www.codeproject.com/Tips/301836/Simple-SMTP-E-Mail-Sender-in-Csharp-Console-applic

2013年12月1日星期日

[Visual C#] 在啟動寫入之後無法設定此屬性 WebRequest

今天使用.NET的HttpWebRequest玩API串接,結果出現錯誤訊息:

在啟動寫入之後無法設定此屬性

原因是使用HttpWebRequest物件時,設定ContentLength一定要比寫入RequestStream還要早。


            var data = "data";
            myHttpWebRequest.ContentLength = data.Length;
            using (Stream stream = myHttpWebRequest.GetRequestStream())
            {                        
                stream.Write(Encoding.UTF8.GetBytes(data) , 0, data.Length);            
            }











HTTP request with post

HOW TO:使用 WebRequest 類別,傳送資料



2013年11月24日星期日

[Visual C#] 讓WebBroswer控制項使用IE9模式運行

WebBroswer控制項預設會使用IE7模式運行,如果想要使用其他模式則需要改變登錄檔(執行Regedit.exe),程式碼如下:

        private void Form1_Load(object sender, EventArgs e)
        {
            var appName = Process.GetCurrentProcess().MainModule.ModuleName;
            Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", appName, 9999, RegistryValueKind.DWord);
        }

其中9999代表IE9,

9999 (0x270F)
Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.

9000 (0x2328)
Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.

8888 (0x22B8)
Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.

8000 (0x1F40)
Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.

7000 (0x1B58)
Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.








[C#]設定WebBrowser Control運行的User Agent版本

Web Browser Control – Specifying the IE Version





























2013年11月21日星期四

[Visual C#] 執行出現 每個組態檔只允許一個 項目 的錯誤

System.Configuration.ConfigurationErrorsException

每個組態檔只允許一個 <configSections> 項目

---

起因是因為在App.config (or Web.config)中 ,   <configSections> 區段一定要是在<configuration>區段中的第一個,如下:

<configuration>
  <configSections>
    ...
  </configSections>
  <applicationSettings>
    ...
  </applicationSettings>
  <connectionStrings>
   ...
  </connectionStrings>
</configuration>

否則會出現錯誤。




app.config 小插曲



2013年11月13日星期三

[ASP.NET MVC] 如何在MVC中支援讀取靜態html;htm 檔案

在route規則中加入以下規則

routes.IgnoreRoute("*.html")

原理是只要看到*.html的要求,則忽略路由規則,不會去找對應的Controller -> Action



[Reference]:

Add Static HTML file to Root of Azure MVC App

2013年11月12日星期二

[ASP.NET MVC] 如何將物件序列化為Json格式,不使用Controller.Json()方法。

在Controller中我們可以輕鬆使用return Controller.Json(obj)方法來將obj序列化成Json格式,

但如果要在其他地方做也許不行,此時可以使用下列方式:

(new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(obj);

來將obj序列化成Json格式,注意回傳是string。

----

更新:

此種方法會讓<br>轉換為\u003cbr\u003e ,推薦使用Json.NET

var objJson = Newtonsoft.Json.JsonConvert.SerializeObject(obj)

如果objJson中含有Html Tag (例如<br>),則需以變數方式寫在HTML TAG中:

<html>
    <div id="D">@objJson</div>
</html>

之後使用JQuery取出:
    var aJson = $.parseJSON($('div#D').text());

這樣aJson 就不會出錯了



Reference :
JavaScriptSerializer 類別

Json.NET