2012年9月23日 星期日

asp.net 抓取本月第一天&本月最後一天日期


百度知識家找到的 很實用 筆記起來..

// 本月的第一天           
DateTime firstDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
//本月的最后一天
DateTime lastDate = firstDate.AddMonths(1).AddDays(-1);
 
int weekDay = (short)DateTime.Today.DayOfWeek;
 
//本周一的日期
DateTime monday = DateTime.Today.AddDays(1 - weekDay);
//本周六的日期
DateTime saturday = DateTime.Today.AddDays(6 - weekDay);

2012年9月11日 星期二

ASP.NET 如何取得 Request URL 的各個部分


轉自:

我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷。例如說 "http://localhost:1897/News/Press/Content.aspx/123?id=1#toc ",我們想要取得網址裡第一層目錄的名字(News)用以判斷不同的頁面標題(Page Title)。
我看很多人都用字串的 IndexOf 方法與 Substring 方法:
Request.Url.PathAndQuery.Substring(1, Request.Url.PathAndQuery.IndexOf("/", 1)-1)
這實在太埋沒 .NET 的強大設計了,事實上在 Request 物件就已經提供很多方便的屬性(Property)可供取得網址的片段。
底下這張表就是各種跟 Browser Request 的網址相關的屬性與用法:
網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc
Request.ApplicationPath/
Request.PhysicalPathD:\Projects\Solution\web\News\Press\Content.aspx
System.IO.Path.GetDirectoryName(Request.PhysicalPath)D:\Projects\Solution\web\News\Press
Request.PhysicalApplicationPathD:\Projects\Solution\web\
System.IO.Path.GetFileName(Request.PhysicalPath)Content.aspx
Request.CurrentExecutionFilePath/News/Press/Content.aspx
Request.FilePath/News/Press/Content.aspx
Request.Path/News/Press/Content.aspx/123
Request.RawUrl/News/Press/Content.aspx/123?id=1
Request.Url.AbsolutePath/News/Press/Content.aspx/123
Request.Url.AbsoluteUrihttp://localhost:1897/News/Press/Content.aspx/123?id=1
Request.Url.Schemehttp
Request.Url.Hostlocalhost
Request.Url.Port1897
Request.Url.Authoritylocalhost:1897
Request.Url.LocalPath/News/Press/Content.aspx/123
Request.PathInfo/123
Request.Url.PathAndQuery/News/Press/Content.aspx/123?id=1
Request.Url.Query?id=1
Request.Url.Fragment 
Request.Url.Segments/
News/
Press/
Content.aspx/
123
所以當你看了這張表之後,你還會想用 Request.Url.PathAndQuery.Substring(1, Request.Url.PathAndQuery.IndexOf("/", 1)-1) 這種寫法嗎?
用這樣寫 Request.Url.Segments[1].Replace("/", "") 不是又短又直覺嗎? ^_^
以下是產生以上表格的程式碼:
protected void Page_Load(object sender, EventArgs e)
{ 

    StringBuilder sb = new StringBuilder(); 

    sb.Append("<table cellpadding=3 cellspacing=0 border=1>"); 

    sb.Append("<tr><td colspan=2>");
    sb.Append("網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc");
    sb.Append("</td></tr>"); 

    // Request.ApplicationPath
    sb.Append("<tr><td>");
    sb.Append("Request.ApplicationPath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.ApplicationPath + "</b>");
    sb.Append("</td></tr>"); 

    // Request.PhysicalPath
    sb.Append("<tr><td>");
    sb.Append("Request.PhysicalPath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.PhysicalPath + "</b>");
    sb.Append("</td></tr>"); 

    // System.IO.Path.GetDirectoryName(Request.PhysicalPath)
    sb.Append("<tr><td>");
    sb.Append("System.IO.Path.GetDirectoryName(Request.PhysicalPath)");
    sb.Append("</td><td>");
    sb.Append("<b>" + System.IO.Path.GetDirectoryName(Request.PhysicalPath) + "</b>");
    sb.Append("</td></tr>"); 

    // Request.PhysicalApplicationPath
    sb.Append("<tr><td>");
    sb.Append("Request.PhysicalApplicationPath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.PhysicalApplicationPath + "</b>");
    sb.Append("</td></tr>"); 

    // System.IO.Path.GetFileName(Request.PhysicalPath)
    sb.Append("<tr><td>");
    sb.Append("System.IO.Path.GetFileName(Request.PhysicalPath)");
    sb.Append("</td><td>");
    sb.Append("<b>" + System.IO.Path.GetFileName(Request.PhysicalPath) + "</b>");
    sb.Append("</td></tr>"); 

    // Request.CurrentExecutionFilePath
    sb.Append("<tr><td>");
    sb.Append("Request.CurrentExecutionFilePath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.CurrentExecutionFilePath + "</b>");
    sb.Append("</td></tr>"); 

    // Request.FilePath
    sb.Append("<tr><td>");
    sb.Append("Request.FilePath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.FilePath + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Path
    sb.Append("<tr><td>");
    sb.Append("Request.Path");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Path + "</b>");
    sb.Append("</td></tr>"); 

    // Request.RawUrl
    sb.Append("<tr><td>");
    sb.Append("Request.RawUrl");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.RawUrl + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.AbsolutePath
    sb.Append("<tr><td>");
    sb.Append("Request.Url.AbsolutePath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.AbsolutePath + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.AbsoluteUri
    sb.Append("<tr><td>");
    sb.Append("Request.Url.AbsoluteUri");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.AbsoluteUri + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Scheme
    sb.Append("<tr><td>");
    sb.Append("Request.Url.Scheme");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.Scheme + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Host
    sb.Append("<tr><td>");
    sb.Append("Request.Url.Host");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.Host + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Port
    sb.Append("<tr><td>");
    sb.Append("Request.Url.Port");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.Port + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Authority
    sb.Append("<tr><td>");
    sb.Append("Request.Url.Authority");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.Authority + "</b>");
    sb.Append("</td></tr>"); 

    // local Request.Url.LocalPath
    sb.Append("<tr><td>");
    sb.Append("Request.Url.LocalPath");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.LocalPath + "</b>");
    sb.Append("</td></tr>"); 

    // Request.PathInfo
    sb.Append("<tr><td>");
    sb.Append("Request.PathInfo");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.PathInfo + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.PathAndQuery
    sb.Append("<tr><td>");
    sb.Append("Request.Url.PathAndQuery");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.PathAndQuery + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Query
    sb.Append("<tr><td>");
    sb.Append("Request.Url.Query");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.Query + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Fragment
    // 原則上你應該無法從 Request.Url.Fragment 取得任何資料,因為通常 Browser 不會送出 #toc 這個部分
    sb.Append("<tr><td>");
    sb.Append("Request.Url.Fragment");
    sb.Append("</td><td>");
    sb.Append("<b>" + Request.Url.Fragment + "</b>");
    sb.Append("</td></tr>"); 

    // Request.Url.Segments
    sb.Append("<tr>");
    sb.Append("<td>");
    sb.Append("Request.Url.Segments");
    sb.Append("</td>");
    sb.Append("<td>");
    string[] segments = Request.Url.Segments;
    foreach (string s in segments)
    {
        sb.Append("<b>" + s + "</b>");
        sb.Append("<br/>");
    }
    sb.Append("</td>");
    sb.Append("</tr>"); 

    sb.Append("</table>"); 

    ltlTable.Text = sb.ToString();
}
注意事項
  • 當程式部署(Deploy)到 IIS 6 之後,假設你的網址是http://localhost:1897/News/Press/Content.aspx/123 ? ,IIS 不知為何會將問號 ( ? ) 給刪除掉,以致於 ASP.NET 使用 Request.Url.Query 是空字串!如果你的程式有判斷到這部分時就要特別注意,因為照理說應該會抓到才對!不知道是不是 IIS 6 的 Bug ?

Request.ServerVariables 所有元素的用法

變數說明
Request.ServerVariables["ALL_HTTP"]Client端發送的所有 HTTP 標題文件
Request.ServerVariables["ALL_RAW"]顯示未處理表格中所有的標題
Request.ServerVariables["APPL_MD_PATH"]顯示 ISAPI DLL 的 (WAM) Application 的資料庫路徑
Request.ServerVariables["APPL_PHYSICAL_PATH"]顯示與資料庫路徑相應的物理路徑
Request.ServerVariables["AUTH_PASSWORD"]該值输入到客户端的鑒定對話中
Request.ServerVariables["AUTH_TYPE"]用户訪問受保護的脚本時,服務器用於檢驗用户的驗證方法
Request.ServerVariables["AUTH_USER"]未被鑒定的用户名
Request.ServerVariables["CERT_COOKIE"]客户端驗證的唯一 ID,以字串方式返回
Request.ServerVariables["CERT_FLAGS"]如有客户端驗證,则 bit0 為 1
如果客户端驗證的驗證人無效(不在伺服器許可的 CA 列表中),bit1 被設置為 1
Request.ServerVariables["CERT_ISSUER"]用户驗證中的頒布者字段(O=MS,OU=IAS,CN=user name,C=USA)
Request.ServerVariables["CERT_KEYSIZE"]安全套接字層連接關键字的位數,如 128
Request.ServerVariables["CERT_SECRETKEYSIZE"]伺服器驗證私人關键字的位數,如 1024
Request.ServerVariables["CERT_SERIALNUMBER"]用户驗證的序列號字段
Request.ServerVariables["CERT_SERVER_ISSUER"]伺服器驗證的頒發者字段
Request.ServerVariables["CERT_SERVER_SUBJECT"]伺服器驗證的主字段
Request.ServerVariables["CERT_SUBJECT"]客户端驗證的主字段
Request.ServerVariables["CONTENT_LENGTH"]客户端發出内容的長度
Request.ServerVariables["CONTENT_TYPE"]内容的數據類型
Request.ServerVariables["GATEWAY_INTERFACE"]伺服器使用的 CGI 規格的修訂
Request.ServerVariables["HTTP_HeaderName"]HeaderName 儲存在標題文件中的值
Request.ServerVariables["HTTPS"]如果請求穿過安全通道(SSL),則返回 ON。如果請求來自非安全通道,则返回 OFF。
Request.ServerVariables["HTTPS_KEYSIZE"]安全套接字層連接關键字的位數,如 128。
Request.ServerVariables["HTTPS_SECRETKEYSIZE"]伺服器驗證私人關键字的位數。如 1024。
Request.ServerVariables["HTTPS_SERVER_ISSUER"]伺服器驗證的頒發者字段
Request.ServerVariables["HTTPS_SERVER_SUBJECT"]伺服器驗證的主字段
Request.ServerVariables["INSTANCE_ID"]文本格式 IIS 實例的 ID
Request.ServerVariables["INSTANCE_META_PATH"]響應请求的 IIS 實例的資料庫路徑
Request.ServerVariables["LOCAL_ADDR"]返回接受請求的伺服器地址
Request.ServerVariables["LOGON_USER"]用户登入 Windows NT® 的帳號
Request.ServerVariables["PATH_INFO"]客户端提供的額外路徑信息
Request.ServerVariables["PATH_TRANSLATED"]PATH_INFO 轉換後的版本,該變數獲取路徑並進行必要的由虛擬至物理的映射
Request.ServerVariables["QUERY_STRING"]查询 HTTP 請求中問號(?)後的信息。
Request.ServerVariables["REMOTE_ADDR"]發出请求的遠程主機的 IP 地址
Request.ServerVariables["REMOTE_HOST"]發出請求的主機名稱
Request.ServerVariables["REMOTE_USER"]用户發送的未映射的用户名字串
Request.ServerVariables["REQUEST_METHOD"]該方法用於提出請求
Request.ServerVariables["SCRIPT_NAME"]執行脚本的虛擬路徑
Request.ServerVariables["SERVER_NAME"]出現在自引用 UAL 中的伺服器主機名、DNS 化名或 IP 地址
Request.ServerVariables["SERVER_PORT"]發送請求的 port
Request.ServerVariables["SERVER_PORT_SECURE"]如果安全端口處理了請求,則為 1,否則為 0。
Request.ServerVariables["SERVER_PROTOCOL"]請求信息協議的名稱和修訂
Request.ServerVariables["SERVER_SOFTWARE"]應答請求並運行網關的伺服器軟件的名稱和版本
Request.ServerVariables["URL"]提供 URL 的基本部分

引用:http://asp.jz123.cn/innerobject/request/intr5vsj.htm

2012年9月5日 星期三

Flash覆蓋到下拉式選單或其它元件


常遇到的問題..目前用此方法都可順利解決 備份自用..

摘自 PTT Web_Design版


 作者  terrylchen (某T)                                      看板  Web_Design
 標題  Re: [問題] 選單被flash擋住
 時間  Wed Nov  4 11:29:23 2009
───────────────────────────────────────
                                                                               
※ 引述《zazai (猛爆小吃團成員10)》之銘言:
前文恕刪


這個問題其實我平常也滿常被問到的,所以回一篇好了。
                                                                               
如果你嵌入flash的方法是用SWFObject之類的方法,
那請手動將參數加上去就好,以SWFObject為例,
就是加上
                                                                               
so.addParam("wmode", "opaque");
                                                                               
但是如果是用DW內建的AC_RunActiveContent.js的話,
那請不要手動加,因為很容易漏掉,
請直接在DW的面板裡面加,程式會自動把所有該加的地方都加上。
                                                                               
1. 點一下要加參數的flash
2. 按下下方屬性面板的「參數」
3. 再跳出的面板左邊加上wmode,右邊加上opaque,然後按確定
                                                                               
這時你如果回去看原始碼,會發現加了三個地方,
第一個是AC_RunActiveContent,
第二個是object裡面的param,
第三個就是embed裡面,
通常手動加最容易漏掉的就是embed裡的這一個,因此導致FF出現錯誤。
不過第二和第三是包在noscript,表示js不能運作下給瀏覽器看的,
所以應該不太可能會發生你說的IE可以FF不能的情況...
還是說你的flash沒有用js嵌入而是直接用object?
                                                                               
                                                                               
另外再順便提一下,常常有人回答加上transparent,其實是不一樣的。
transparent是因為把flash變成透明背景,
而由於剛好下拉選單的位置沒有東西擋到,
所以造成下拉選單蓋在flash上錯覺,
這時候如果你在flash裡面隨便扔個色塊就會把選單擋起來了,
所以正確的值是用opaque而非transparent。
雖然看起來似乎是一樣,但是意義上是不同的。