顯示具有 2.3.2 ASP.net技研 標籤的文章。 顯示所有文章
顯示具有 2.3.2 ASP.net技研 標籤的文章。 顯示所有文章

2011年12月11日 星期日

HTML vs CSS - 用 HTML 5 就可以跨瀏覽器平台嗎?

前言
最近最 Hot 的不外乎就是 Cloud、HTML 5、Phone
尤其是老闆突然有一天說,我們的 手機、iPad 是不是也可以連到我們的系統做○○的事情?
不然就是 瀏覽器一換,畫面一切都不一樣了 ( 遠目 )

這時常常就會被問到
「為什麼用 ASP.NET 開發的網頁沒辦法在 iPad 上看?」
「為什麼用 IE 9 和 Chrome、Safari 上看的結果不一樣?」
「ASP.NET 是不是不能相容 iPhone 的?是不是要用 PHP?」
「用了 HTML 5 是不是就可以跨平台了?」
……
很多這類的問題

相信大家對於 HTML、CSS 以及 JS 一定都非常了解
但是加上 瀏覽器的組合就怪事就常常發生了!

自從 C 公司問了「為什麼別人用 Chrome、Safari 都可以,就 IE 」不行?
這應該是 IE 的 Bug 吧!


從結果上來看真的是差別很大!
但一看了 HTML 和 CSS 後發現有一些爭議的地方!
說穿了就是沒有按照「W3C的規範」來寫 HTML 和 CSS

經過調整後,一切就可以正常地顯示!

可以看到大小、圓角、圖片位置都是正確的

首先!並不是說用了  HTML 5 和 CSS 3 後就可以讓所有的瀏覽器都統吃!
也許會有人疑問:「不是說每個瀏覽器的HTML 都有符合 W3C 的規範嗎??」

這句話沒有錯!但並不是每個瀏覽器每個 Tag 都有支援!每個解析、顯示的方式都一樣!
所以有可能 A 的寫法 可以讓 A 瀏覽器正常顯示!其他的卻不行的情況發生
尤其是網頁的介面設計可能都是由專業的網站設計師進行設計的情況下
在沒有了解「規範」的情況下,很有可能會有不相容的情況發生


Q1、WebKit 是標準的 CSS 語法吧?
由於瀏覽器版本多,要支援每一種就必須要用「標準」的語法才可以。
而WebKit 的語法 這是由 Safari 所推出的,它並不是在 W3C 的 CSS 3 的規範中
所以前面才會有 WebKit 的前置碼。而且 並不是只有 Safari 有自已的語法 ( Chorme 也是用同一個 )!
當然,FireFox 也有專用的 moz 語法
從日後管理的角度來看!用的越多,同仁在寫 CSS 就會越複雜 ,日後也會越難以維護。
就會有一堆的語法是互斥的 ,所以不建議為了一時的方便而隨意引用。
會造成日後相容性的問題
有興趣的可以參考這個 http://zh.wikipedia.org/wiki/WebKit

2011年11月27日 星期日

ASP.Net教學 JMail.Message 發信

在Asp程序中用Jmail發郵件的比較多,主要是因為多數虛擬主機支持他,其它的支持的較少。下面是一個Jmail發郵件的例子代碼:

如果您在自己的機器上試,請下載Jmail.dll,下載解壓後,雙擊Setup.bat 即可完成安裝!

程序代碼
<%
On error resume next
Dim JMail, contentId
Set JMail = Server.CreateObject("JMail.Message")
JMail.Charset = "gb2312" ' 郵件字符集,默認為"US-ASCII"
' JMail.ISOEncodeHeaders = False ' 是否進行ISO編碼,默認為True

' 發送者信息(可用變量方式賦值)
JMail.From = "someone@51windows.net" ' 發送者地址
JMail.FromName = "海娃" ' 發送者姓名
JMail.Subject = "郵件主題" ' 郵件主題

' 身份驗證
JMail.MailServerUserName = "myusername" ' 身份驗證的用戶名
JMail.MailServerPassword = "mypassword" ' 身份驗證的密碼

' 設置優先級,範圍從1到5,越大的優先級越高,3為普通
JMail.Priority = 3

JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")

' 加入一個收件人【變量email:收件人地址】可以同一語句重複加入多個
JMail.AddRecipient("someone@somehost.com")

' 加入附件【變量filename:附件文件的絕對地址,確保用戶IUSR_機器名有訪問的權限】
' 【參數設置是(True)否(False)為Inline方式】
'contentId = JMail.AddAttachment (Server.MapPath("jmail.asp"), True)

' 郵件主體(HTML(注意信件內鏈接附件的方式))
JMail.HTMLBody = "<html><head><META content=zh-cn http-equiv=Content-Language><meta http-equiv=""Content-Type"" content=""text/html; charset=gb2312""><style type=text/css>A:link { FONT-SIZE: 9pt; TEXT-DECORATION: none; color: #000000}A:visited {FONT-SIZE: 9pt; TEXT-DECORATION: none; color: #666666}A:hover {COLOR: #ff6600; FONT-SIZE: 9pt; TEXT-DECORATION: underline}BODY {FONT-SIZE: 9pt} --></style></head><body><font color=red>郵件正文</font><br><font color=green>郵件正文</font><br><b>郵件正文</b></body></html>"

' 郵件主體(文本部分)
JMail.Body = "我們的郵件採用了HTML格式,但是您的郵件查看軟件可能不支持。。。郵件正文,郵件正文,郵件正文"

' 發送【調用格式:objJMail.Send([username:password@]SMTPServerAddress[:Port])】
JMail.Send("smtp.163.com")

' 關閉並清除對像
JMail.Close()
Set JMail = Nothing

if err.number<>0 then
    response.write "發送發送失敗!"
else
    response.write "郵件發送成功!"
end if
%>  


常用收發郵件組件下載(jmail、cdonts、aspemail):

ASP.Net 圖片不存在時即隱藏的語法

<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# "~/images/pic/" + Eval("ImgFile") + ".jpg" %>'
Visible='<%# My.Computer.FileSystem.FileExists(MapPath("~/images/pic/" + Eval("ImgFile") + ".jpg")) %>' />
</ItemTemplate>

ASP.Net Cookies的寫入及讀取方法

ASP.Net 的Cookie簡介及用法

Cookie(餅乾)是一個在網頁應用程式上拿來儲存瀏覽者資料的做法之一‧ 例如,當一個瀏覽者參觀您的網站時,您就可用Cookie把對方的一些資料儲存起來,並且下一次再使用‧ 另外,如果您有學習過ASP, PHP這類語言的話,相信Cookie對你絕對不陌生‧ 假設您是學習VB, C++的設計師的話,用Cookie就好比是寫資料到使用者的Registry裡一樣‧ 只是用Cookie比較簡單,而且對初學者而言,Cookie也比Registry還容易瞭解!

Cookie事實上是以純文字方式儲存在使用者電腦某資料夾裡面的,以Microsoft Windows NT (2000, XP)的使用者來說,每一個使用者都有一個自己個人的資料夾來放Cookie檔案,而這資料夾通常都會在『C:\Documents and Settings\使用者\Cookies\』這邊‧ 每一個Cookie都儲存著每一個不同網站所存的資料,而每一項所擁有的資料都會不同,這會看網站程式編寫者而定‧ 有時候Cookie會儲存您在某一網站的帳號或密碼、會員身份、登入/登出日期等等‧ 甚至Cookie也可以拿來做是防治瀏覽者重覆投票的防範方法之一!

在使用Cookie上,注意cookie使用也是有一些限制的! 例如一般瀏覽器至少都會支援4096 Bytes的Cookie,允許20個(各網站‧如果您嘗試使用超過更多的Cookie,那麼小心舊的Cookie就會莫名其妙消失!),也許看起來很少,不過基本上卻已經足夠儲存你純文字的資料了! 另外也有一些瀏覽器會有只允許儲存共300 Cookies的限制(所有網站的加起來)‧ 還有,每一個Cookie都會有它的存活時間! 基本上來說,Cookie除了靠網站程式結束外,如果您自己關閉了瀏覽器,那麼Cookie也會自動消失‧ 不過值得慶幸的是您可以自由的設定Cookie的過期時間,這我將會說明!

筆記:剛才提到了Cookie是儲存在瀏覽者電腦裡面的,所以身為網頁程式編寫者的您,也必須留意到瀏覽者也是會隨意的刪除或想辦法亂修改的! 有時太過相信Cookie的資料內容的話,也可能會導致一些人為問題喔!』


用ASP.Net 寫入一個Cookie資料

假設您是純ASP (Active Server Pages)的學習者,也許在剛開始接觸ASP.Net時可能會有點不習慣! 以Cookie做例子,要閱讀或寫Cookie絕對不是像ASP這樣:

閱讀Cookie資料(ASP):
Dim mycookie : mycookie = Request.Cookies("eat_cookie")

寫入Cookie資料(ASP):
Response.Cookies("eat_cookie") = "C is a cookie!"

在ASP.Net,跟ASP一樣,要寫Cookie都會要使用Response property,要讀用Request‧ 就先講寫入Cookie吧! 如果您想要建立一個Cookie資料,您可以創造單一個Cookie,或在同一時間建多重也是可以(Sub Cookies)‧ 單一的話:
Response.Cookies("mycookie").Value = "C is a cookie!"

要建立一個Sub cookie的話:
Response.Cookies("mycookie")("flavor") = "Coffee"

剛才我有提到Cookie過期的話題,如果要另外加長的話,那麼(假設存活時間設一年):

Response.Cookies("mycookie").Value = "C is a cookie"
Response.Cookies("mycookie").Expires = DateTime.Now().AddDays(365)

註:用Sub cookie也是用類似的方法來設定存活時間

假如我的網站有Sub domain的話,您也可以設定Domain property來分享Cookie:
(例如我的網站叫www.tekcyberspace.com,然後我有一個Sub domain叫forum.tekcyberspace.com)
Response.Cookies("mycookie").Value = "C is a cookie"
Response.Cookies("mycookie").Expires = DateTime.Now().AddDays(365)
Response.Cookies("mycookie").Domain = "forum.tekcyberspace.com"


讀取Cookie資料

讀Cookie就比較簡單了‧ 我就直接講吧! 假設要讀單一Cookie的話:
Dim get_mycookie As HTTPCookie = Request.Cookies("mycookie")

寫出一個Cookie資料:
Dim get_mycookie As HTTPCookie = Request.Cookies("mycookie")
If Not get_mycookie Is Nothing Then
Response.Write(get_mycookie.Value)
End If
注意如果沒有Cookie在的話,你接受到的會是 Nothing‧

讀取並寫出Sub cookie資料:
Dim get_mycookie As String = Request.Cookies("my_cookie")("flavor")
If not get_mycookie = "" Then
Response.Write(get_mycookie)
End If

這些就是Cookie常用的方法,事實上用法還有更多! 如果有興趣的話,可以到微軟的MSDN(http://msdn.microsoft.com/)來查詢更多的相關資料! 或者到http://msdn.microsoft.com/zh-tw/library/9e7efcf2(v=VS.80).aspx來看.Net的Cookie members :-)

想學 ASP.NET MVC 嗎?研究 Oxite 這套 CMS 系統吧!

ASP.NET MVC 一直是我很想研究的主題之一,但之前因為一直處於 Preview 階段很長一段時間,我大多都只有看看而已,並沒有深入研究。不過大概在快兩個月前在 ScottGu 的部落格已經公告 ASP.NET MVC Beta Released 的訊息,我當時就臆測 ASP.NET MVC 應該已經很接近穩定狀態了,對於一些架構應該不會有太大的變更,差不多是可以開始學習跟使用的階段了。

今天看到一則不錯的新聞,微軟這幾天釋出了一套開放原始碼(Open Source)的內容管理系統(CMS, Content Management System)產品,名叫:Oxite ( 讀音: 阿哥賽特)



Oxite 的特色就在於他完全採用 ASP.NET MVC 的全新技術架構開發出來的,整套系統的架構非常模組化,把元件拆的很細,你可以很容易的修改與擴充既有的功能,非常適合作為通用型的內容管理平台,從部落格類型的網站到大型的網站,都可以使用 Oxite 建置。
雖然目前 Oxite 還處於 Alpha 版的階段,但是已經有一個眾所皆知的網站已經用 Oxite 實做出來了,那就是 MIX Online 網站。我原本一直在猶豫要何時開始採用 ASP.NET MVC 技術開發新網站,但現在幾乎是不用懷疑了,Just Now !

由於 Oxite 提供非常完整的程式原始碼,對於要學習 ASP.NET MVC 架構的人來說,應該是一個極佳的學習管道,我相信一定可以從中學到不少技術與經驗。

相關連結

ASP.NET 網站流量大時用 Session 太損耗記憶體,那要用什麼?

我們開發網站時,如果會員人數多且流量真的很大的話,用 Session 不見得是好方法,因為十分損耗記憶體。
在 ASP.NET 中雖然你可以將 Session 的資料改存到 ASP.NET 狀態伺服器 或 SQL Server 中,是可以解決「記憶體」耗用的問題,但是多少還是會有網頁執行效能的問題,因為使用者每讀取一頁都要進資料庫讀取 Session 資料,這多少會增加網頁的反應時間。
我們有些網站就會將這類個人化的資訊改用 Cookie 或 URL 來儲存。例如說:你可能有上過 Amazon 或 Yahoo 的網站,有些網址特別的長,而且都是看不懂的亂碼,就有可能他們是將特定的個人化資訊 (e.g.帳號或Token) 加密後直接放在網址裡,這樣可以省去伺服器的一些資源(CPU, Memory)。
但基於安全性考量,我們不會把機密的資料直接儲存在 Cookie 或 URL 裡,而是改用「加密過後」的資料,到了伺服器在視情況解密,這不但節省記憶體的使用,也會減少資料的 I/O 動作,進而提升執行效率。如果你想研究怎麼用 C# / .NET 加密的話,可以參考這篇文章:
Encrypting and decrypting data
如果用另一個角度來思考,就是拿一點點「頻寬」來換「記憶體」,因為就成本考量下,「頻寬」的成本比「記憶體」低太多了。

ASP.NET VB 如何用.NET發mail

'這裡需要一個Button

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim newMail As New System.Net.Mail.MailMessage
        Dim ToAddress(,) As String = {{"to@yahoo.com.tw", "to"}, {"to@msa.hinet.net", "to"}}
        Dim CCAddress(,) As String = {{"cc@yahoo.com.tw", "cc"}, {"cc@msa.hinet.net", "cc"}}
        Dim BccAddress(,) As String = {{"bcc@yahoo.com.tw", "bcc"}, {"bcc@msa.hinet.net", "bcc"}}
        Dim AttachFile() As String = {"C:\temp\123.xls", "C:\temp\456.xls"}
        Dim smtpMail As New System.Net.Mail.SmtpClient

        With newMail
            .From = New System.Net.Mail.MailAddress("from@msa.hinet.net", "from")  '寄件者
            .Body = "Hello Every Body!!"    '內文
            .Subject = "測試資料!!"         '主旨
            .BodyEncoding = System.Text.Encoding.GetEncoding("BIG5")    '編碼方式

            For i As Int32 = 0 To ToAddress.GetUpperBound(1)    '收信人
                .To.Add(New System.Net.Mail.MailAddress(ToAddress(i, 0), ToAddress(i, 1)))
            Next
            For i As Int32 = 0 To CCAddress.GetUpperBound(1)    '副本
                .CC.Add(New System.Net.Mail.MailAddress(CCAddress(i, 0), CCAddress(i, 1)))
            Next
            For i As Int32 = 0 To BccAddress.GetUpperBound(1)   '密件副本
                .Bcc.Add(New System.Net.Mail.MailAddress(BccAddress(i, 0), BccAddress(i, 1)))
            Next
            For i As Int32 = 0 To BccAddress.GetUpperBound(1)   '夾檔
                .Attachments.Add(New System.Net.Mail.Attachment(AttachFile(i)))
            Next
            .IsBodyHtml = True                      '是否為HTML格式
            .Priority = Net.Mail.MailPriority.Normal '優先權
        End With
        Try
            smtpMail.Host = "msa.hinet.net"
            smtpMail.SendAsync(newMail, "TEST")
        Catch ex As Exception
            MsgBox(ex.InnerException)
        End Try
    End Sub

ASP.Net入門 Visual Web Developer 軟體基本操作-上課筆記-分享2U

課程名稱:Asp.Net初階第二堂    日期:2010年6月10日    講師:王小華

ChiaFang隨堂筆記分享~僅供學習參考喔!









ASP.Net入門 Visual Web Developer 軟體安裝及IIS設定-上課筆記分享2U

課程名稱:Asp.Net初階第一堂    日期:2010年6月8日    講師:王小華

ChiaFang隨堂筆記分享~僅供學習參考喔!







2011年11月26日 星期六

ASP.Net統計圖-教學分享







1.下載 WebChart.dll在工具箱中擇一現有索引標籤項,如「一般」,以「選擇項目」加入 ChartControl 控制項。
2.拖曳 ChartControl 控制項至網頁設計,仿下列程式碼設計,即得上列左圖之成果!


ASP.Net 控制項 AutoPostBack時的捲軸定位

設計互動控制項要讓網頁隨著網友的選擇動作做更新時...

(例如:DropDownList下拉式選單)
多半會勾選AutoPostBack讓網頁會在選取項目改變時即時刷新...
但是...只要一刷新...網頁再重新載入時就又會回到最上端...
如果控制項的位置在網頁的下半段...真的很討厭...
尤其填表單時如果AutoPostBack的動作不只一個...滑鼠滾輪都快起火了!

如何使網頁自伺服器回傳時,維持原網頁捲軸位置,不跳回網頁上端?

在網頁(.aspx)的「原始檔」編輯視窗,第一行 Page 設定的尾端空格處按下空格鍵,顯現的智慧標籤即有「MaintainScrollPositionOnPostBack」屬性選項



指定其屬性值為「True」

轉貼 ASP.Net 程式人員的心聲-為啥那人寫 code 感覺用飛的-善用快速鍵

話說,剛進入這條不歸路的時候,那時還是用 VB6。
第一次見到師父 ABBY ( 哈哈!!這個英文名字在台灣應該找不到第二個了吧!)
他老人家寫程式碼的時候,我的下巴都快要掉下來啦!! ( 當時我的表情應該就是這樣子吧! )
簡直就是用飛的感覺,這是人類可以辦到的嗎?
無論是寫 code 或是 追 Bug 都幾乎沒用到 mouse
他老人家告訴我幾個訣
真的是受用無窮呀!!就跟騎腳踏車一樣
基本條件
一個好用的鍵盤
最好是那種 104 標準+ 的,和自已喜歡按下去的感覺。( 找到那個 fe 是很重要的 )
一定要可以英文盲打!
這是寫 code 的基本原則,而且是要同時「兩隻手」可以迅雷不及掩耳的速度打完 public void main()
工具一定要支援 Interllisense
這一點尤其重要,別再跟我說「這個有跟沒有一樣呀」,能少打幾個字就少打幾個字啦!
記住自已常用的快速鍵
別跟我說不知道啥是 F5

----------- Visual Studio .NET 系列開發平台 通用 ------------------------------------------
廢話不多說啦!馬上來介紹幾個自已很常用的
選取整行的字 [Home] , [Shift]+[End] ( 這個順序沒差 )
選取一個區塊 [Shift] + [↓] or [↑] 有時要搭配 同一行選字時請再 [Shift] + [Ctrl] + [→] or [←]
選取一個區塊 ( 一行一行 ) [Shift] + [Ctrl] + [↓] or [↑]
選取一個單字 [Shift] + [Ctrl] + [→] or [←]
呼叫出 InterlliSense 小視窗 [Ctrl] + [→] or [Ctrl] + [J] ( 要看當初的鍵盤設定 )
執行程式 [F5] ( 其實我還是常常看到很多人用 mouse )
逐行執行程式 [F11] ( VB6 的話印象是 F8 )
設定/去掉 中斷點 [F9]
進入呼叫 method 的程式區塊 [F12] ( 這個很方便喔!一定要試試 ) ( VB6 的話印象是 F10 )
找東西 [Ctrl] + [F] / 取代 [Ctrl] + [H]

--------- 補充 -------------------
快速切換不同工具/ 文件時 [Alt] + [Tab]
在有頁籤時想要快速切換時 [Ctrl] + [Tab]
其實只要以上 10 個幾乎可以適用在大多數的地方 ( 一開始也用不了這麼多啦! )
原本沒有寫說要寫這方面的,但過了這麼久發現這個部分很多人其實都沒有這麼在意,工具有提供卻沒有用覺得很可惜 ( 這個以前教其他同事就教了至少超過十幾遍了吧 )
這些東西可以供大家參考參考,可以有更多自已的時間 提升平常寫作的效率喔!

ASP.Net常用程式-點擊表格行連結另一頁

點擊表格行連結另一頁
private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
 //點擊表格打開
 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  e.Item.Attributes.Add("onclick","window.open(’Default.aspx?id=" + e.Item.Cells[0].Text + "’);");
}


雙擊表格連接到另一頁
在itemDataBind事件中
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
 string OrderItemID =e.item.cells[1].Text;
 ...
 e.item.Attributes.Add("ondblclick", "location.href=’../ShippedGrid.aspx?id=" + OrderItemID + "’");
}


雙擊表格打開新一頁
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
 string OrderItemID =e.item.cells[1].Text;
 ...
 e.item.Attributes.Add("ondblclick", "open(’../ShippedGrid.aspx?id=" + OrderItemID + "’)");
}


★特別注意:【?id=】 處不能為 【?id =】 (設定QueryString的變數及等耗之間不能有空格)


表格超連結列傳遞參數
<asp:HyperLinkColumn Target="_blank" headertext="ID號" DataTextField="id" NavigateUrl="aaa.aspx?id=’
 <%# DataBinder.Eval(Container.DataItem, "數據欄位1")%>’ & name=’<%# DataBinder.Eval(Container.DataItem, "數據欄位2")%>’ />

ASP.net 網站對郵件的自動追蹤(C#)

網站對寄出去的郵件是否有被閱讀過的自動追蹤對於一些網站而言,追蹤自己送出的郵件確實被閱讀過會是一種很有幫助的功能‧ 當然,每一個人所需要的理由都會不同,這可能是安全考量、資源、或者只是想要確定對方確實有閱讀你送出的重要郵件‧ 也許您知道有些網站會在您註冊會員後自動送出一封包含確認連結的通知信... 其實這一篇文章也是利用類似這一種辦法來追蹤自己寄出的郵件是否有被閱讀,但這邊我不利用手動的方式讓使用者自己去確認,我們想要用自動的‧ 我在此的編寫的程式碼範例將會是 C# ,但不熟悉這語言的朋友沒關係,我將會盡量詳細說明要寫這一個程式應該要有的步驟來彌補 "語言溝通" 上的問題‧


利用圖片做到自動化效果
我們之所以能做到自動化的原因,就是因為我們要想辦法傳送一個東西給收信者,在他打開這一封信時,這一個東西會自動與某一個遠端程式做連線,然後達到追蹤的效果 :-) 因為我們知道,這個東西一連到對應的程式來,就代表使用者一定是開啟了這封信件‧ 而在這邊,我利用圖片自動遠端要求圖片的特性去連到一個可以去做確認使用者動作的網頁(或程式)... 當然,圖片我將故意調成 width=0, height=0 故意藏起來! 以下是一個圖片自動連線到網頁去的一個例子: <img src="http://127.0.0.1/mailTracker/Verify.aspx">


重點: 做到這種自動追蹤的效果,必須要有一個客戶端,跟一個回應端


如何確認一個使用者
當你看到上面html圖片語法的例子,你也許會問: "我只光連到一個網頁去,那網頁該怎麼判斷我是誰?" 當然,我們要想個辦法去辨認! 在這邊,我們假設在郵件送出前,就先製造了一個 "確認鑰匙" ,然後放在圖片的src (source) attribute 一起送出去,這樣子圖片一連線時,就會同時把我們之前丟過去鑰匙丟回,達到確認的效果‧

這一個鑰匙可以是一個名字,或一個ID等等‧ 當你要選擇要用什麼方法做確認鑰匙時,別忘了這個選擇將會影響到服務的安全性! 因為越簡單,或越容易看懂(看穿)的鑰匙,被惡作劇的可能性就越高‧ 如果你是隨便用一個照順序的ID, 像是 123... 那麼惡作據者就可以稍微寫個小script, 從123一直要求上去擾亂... 那到時就失去確認的效果‧

所以在此,我用MD5編碼output出來做確認鑰匙,這樣被擾亂的機會就很比較小‧送回鑰匙的範例如下: <img src="http://127.0.0.1/mailTracker/Verify.aspx?key=4A53428134783EC9C6935A7C0D4671EB">


從送出郵件到確認的過程
在程式碼範例前,我先說一說整個追蹤過程的步驟‧
1. 先建立收信者資料和確認鑰匙到資料庫裡去
2. 把這個鑰匙也寫在img的src attribute裡面,然後寄給收信者
3. 收信者一打開信,電腦就會開始照著img裡的src去開始要求資料
4. 連線目標,也就是對應的網頁開始拿著接受到的鑰匙去確認使用者
5. 如果接受到的鑰匙跟資料庫的符合,則標名該收信者已被確認,或直接刪除

程式碼範例

ASP.Net常用參數傳遞方法

傳送參數:

response.write("*.aspx?id=" & this.DropDownList1.SelectIndex & "&id1= ...")


打開新的視窗並傳送參數:

response.write("<script>window.open(’*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"’)</script>")


接收參數:

string a = Request.QueryString("id");
string b = Request.QueryString("id1");

ASP.NET MVC 學習資源整理[轉貼]

最近手邊的工作還是讓我忙的焦頭爛額,根本都沒時間進修什麼新技術,像是 ASP.NET MVC 想學很久了,卻遲遲沒時間著手學習,不過這段時間只要看到關於 ASP.NET MVC 的相關資訊都會收集下來,等待日後學習時可以一鼓作氣。以下是相關學習資源整理:
當然,學新技術的第一步通常都是從官方提供的網站開始找資料:

我學新技術最喜歡從「影片」看起,看影片可以很快速的學到別人在使用新技術開發時的一些技巧,可以很快的抓到技術的重點與精髓。以下前四則影片是濃縮版的影片,短短幾分鐘就能讓你快速上手,最後一個連結是所有 ASP.NET MVC 的影片教學網址:

另外,範例程式絕對少不了,前幾天介紹的 Oxite 是一個非常完整的範例,沒有一點功力的人要看懂整個架構應該會有點吃力,在 ASP.NET MVC 官網上還另外提供三個 ASP.NET MVC 寫成的範例應用程式可供初學者下載

另外還有 QuickstartsTutorials 系列的文章也是我的最愛之一:

幾個知名的部落格也是必要的資訊來源:

要是這些資料能消化完的話,菜鳥也能變天王了~ 但我知道大部分的人看到這些資料的第一印象一定是「怎麼都是英文的」,若各位想走在技術的最前線,英文的聽、讀能力絕對是少不了的,只有當下開始努力學習,才會有你想要的未來。
中文文章

其他連結 / 延伸閱讀

保哥的開發筆記


感謝保哥提供的豐富資料!!!  保哥的網站:http://blog.miniasp.com/

ASP.net 缺圖時不顯示紅叉叉的方法(javascript)

如何讓找不到圖片的地方不顯示紅叉?
將下列程式碼加入網頁標題區: (不喜歡"[缺圖]"兩個字,也可以自行更動文字)
<script type="text/javascript">
var imgErr = function(imgObj){
imgObj.parentNode.innerHTML = '[缺圖]';
}
</script>


圖片控制項設定 onerror 屬性:
<img id="image" src="MyPic.jpg" onerror="imgErr(this);" />

ASP.net 利用預設的控制項 FileUpload 上傳檔案至伺服器

<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
If FileUpload1.HasFile Then
Try
FileUpload1.SaveAs("C:\Uploads\" & FileUpload1.FileName)
Label1.Text = "檔案名稱:" & FileUpload1.PostedFile.FileName & "<br>" & _
"檔案大小:" & FileUpload1.PostedFile.ContentLength & " kb<br>" & _
"內容型式:" & FileUpload1.PostedFile.ContentType
Catch ex As Exception
Label1.Text = "出現錯誤:" & ex.Message.ToString()
End Try
Else
Label1.Text = "未指定檔案!"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Upload Files</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click"
Text="Upload File" /> <br />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label></div>
</form>
</body>
</html>

ASP.net Session遺失的幾種可能

前言
還蠻常遇到人家發問的問題是Session值掉了,
所以在這邊作個整理,

希望各位前輩能幫忙補充一下文章中漏掉的部分。

介紹

結論
Session消失的問題,總是很麻煩,
通常都是在User-site的機器,『偶爾』跟『不知道為什麼』會出現Session值掉了的問題,不容易模擬出一樣的環境,
不管是因為時間、機器名稱設定、UI操作行為、IIS站台設定、虛擬目錄架構問題,都是不容易模擬和發現的錯誤。

希望整理出這一篇,可以幫到千千萬萬的developer和SE。也感謝網路上有這麼多前輩願意分享這樣的資訊。

轉貼來源:http://www.dotblogs.com.tw/hatelove/Default.aspx  感謝分享!!!

Asp.net DataGrid自定義分頁代碼-分享2U

先定義變數 :
public static int pageCount;   //總頁面數
public static int curPageIndex=1;   //當前頁面


下一頁:
if(DataGrid1.CurrentPageIndex < (DataGrid1.PageCount - 1))
{
 DataGrid1.CurrentPageIndex += 1;
 curPageIndex+=1;
}
bind();   // DataGrid1資料綁定函數


上一頁:
if(DataGrid1.CurrentPageIndex >0)
{
 DataGrid1.CurrentPageIndex += 1;
 curPageIndex-=1;
}
bind();   // DataGrid1資料綁定函數


直接頁面跳轉:
int a=int.Parse(JumpPage.Value.Trim());  //JumpPage.Value.Trim()為跳轉值
if(a<DataGrid1.PageCount)
{
 this.DataGrid1.CurrentPageIndex=a;
}
bind();