Category Archives: ASP.NET2.0

Lightweight Rich Text Editor 的 Postback 問題

在上一篇 Lightweight Rich Text Editor (RTE / WYSIWYG) plugin for jQuery 中曾經提到:如果曾在此 Editor 上切換 html/css 時, 其接收方式就必須改為 Request.Form 的方式接收, 原因為何呢?? 我們必須先去瞭解此 Editor 切換 html/css 的方式以及 Post 時的狀況…

該 Editor 使用方式非常簡單, 只需使用下列源碼即可(假設已經有個 class 為 rte 的 textarea )

=====[ Code Start / JavaScript (MSIE 5.5 DOM), with (Jscript) Windows Script Host ]=====
$(‘.rte’).rte({
    css: ‘default.css’,
    controls_rte: rte_toolbar,
    ontrols_html: html_toolbar
});

請自行下載該源碼, 以下將節錄部分源碼加以說明…

=====[ Code Start / JavaScript (MSIE 5.5 DOM), with (Jscript) Windows Script Host ]=====
lwRTE.prototype.enable_design_mode = function() {
    // …. 省略    
    if($(self.textarea).attr(‘name’))
        self.iframe.title = $(self.textarea).attr(‘name’);
    var content    = $(self.textarea).val();
    $(self.textarea).hide().after(self.iframe).remove();
    self.textarea    = null;
    // …. 省略    
}

self.textarea 為一 Element, 就是第一段以 $(‘.rte’) 方式傳入的 textarea; 而 self.iframe 也是一個 Element, 將是 HTML 編輯器的編輯區塊…

lwRTE.enable_design_mode 的作用是將 Editor 變更為 HTML 編輯模式…
請注意上段源碼的 $(self.textarea).hide().after(self.iframe).remove();,
源碼會先將 self.textarea 的 name attribute 存放於 self.iframe 的 title attribute 中…
然後把 self.textarea 隱藏後, 在該 Element 後面插入 self.iframe, 再將 self.textarea 移除… 請注意是移除不是隱藏喔…

我們再看另一段源碼…

=====[ Code Start / JavaScript (MSIE 5.5 DOM), with (Jscript) Windows Script Host ]=====
lwRTE.prototype.disable_design_mode = function(submit) {
    var self = this;
    self.textarea = (submit) ? $(‘<input type=”hidden” />’).get(0) : $(‘<textarea></textarea>’).width(‘100%’).height(self.height).get(0);
    // …. 省略
    if(self.iframe.title)
        self.textarea.name = self.iframe.title;
    // …. 省略
    if(submit != true) {
        $(self.iframe).remove();
        self.iframe = null;
        self.activate_toolbar(self.textarea, self.toolbars.html);
    }
}

在lwRTE.disable_design_mode的作用是將 Editor 變更為純文字的編輯模式…
此函示中, 會依 submit 來決定是新增 HiddenField 還是 TextArea, 並將新增 Element 中的 name attribute 設定為 self.iframe 的 title attribute, 當 Postback 時, 才能將其 html 內容回傳…
在重複切換 html/css 多次後, 將會造成 self.textarea 多次 create & remove, 所以當 Postback 後, Server Side 會收到多份以原 textarea 為 name 以及同樣 name 的 HiddenField 資料…

不曉得原因為何, 但如果 jQuery 有確實 remove element 的話, 照理來說是不應該會有這種情況發生, 但為解決這個問題, 所以必須使用在上一篇提到的方法 Request.Form, 因為在ASP(ASP.NET)中, POST 收到的資料, 如果 name 相同的話, 將會以 Array String (string1, string2, …) 的方式傳送, 所以必須以Request.Form 的方式加以接收並擷取…

而擷取資料的方式為 :

=====[ Code Start / C Sharp (Include .NET Framework 2.0) ]=====
string[] arr = Request.Form.GetValues(TextBox1.UniqueID);
Label1.Text = arr[arr.Length – 1];

為何擷取最後一個的值, 因為 lwRTE 所插入的 HiddenField 是插入在原有 TextArea 的後面, 所以取最後一個才是正確的 html 內容

以上說明, 希望能幫到需要的人…

[.NET] 修改 Form 驗證的 Session Timeout 值

原因是使用者登入後操作了一陣子,然後去作別的事 (倒水、泡茶、喀瓜子還是聊八卦),過了一段時間後回來再點系統的任何一頁,會再次出現登入視窗,試了在 Global.asax 加上 Session.Timeout 值為 1440 (一天) 沒有用處,Login.aspx 的程式裡也沒有設定其它的 Session Timeout 值,用 Cookie Viewer 查看系統在 Login 後送出來的 Cookie,發現餅干的過期時間還是 30 分鐘 (等於是 Global.asax 中設的無效),最後找到是在 Web.Config 裡的 authentication tag 可以設定 Form 驗證的 Session Timeout 值,範例如下:

<authentication mode="Forms">
    <forms loginUrl="login.aspx" protection="All" timeout="1440" slidingExpiration="true" />
</authentication>

改完再測試餅干的過期時間,變成一天了,收工~

[ASP.Net 2.0] TreeView只能用XML資料的解決之道

在前幾個章節所介紹的TreeView
([ASP.NET 2.0]SiteMapPath無法正確指到帶有QueryString的路徑
[ASP.NET 2.0]SiteMapPath WebControl)
有個限制(至少我覺得是限制),那就是只能使用XML的資料格式

但假如我們的資料是資料庫形式的資料該怎麼辦?

有兩個解決方法:一是自己寫程式,將節點加到TreeViewNode裡;一是另外寫個類似TreeViewNode的Class自己用
我是選第二個方法,這樣我就不用每次使用TreeView時,都要在寫那麼長一段程式碼了
Continue Reading

[ASP.NET 2.0]SiteMapPath無法正確指到帶有QueryString的路徑

在上次介紹過 SiteMapPath WebControl 製作網頁路徑後,相信各位應該會碰到帶 QueryString 時,會發生SiteMapPath指錯路徑,譬如以上次介紹 [ASP.NET 2.0] SiteMapPath WebControl 一文中的 web.sitemap 為例:[xml]


[/xml]
其中有指定 Album、Album[Mode 1]、Album[Mode 2] 三個網址,而所指的網頁是同一頁,只是 QueryString 不同而已
假如只是這樣,還不會有啥問題,但要是還帶有其他參數時,問題就發生了
譬如 Album[Mode 1] 網頁中有一網址為 Album/Default.aspx?md=1&id=1234
當連結至這個網址時,SiteMapPath 理當要指到 Album[Mode 1],但他卻指到 Album (或更上層的節點),這樣就不對了呀!怎麼辦?
很簡單,我們只要覆寫 (override) XmlSiteMapProvider.SiteMapNode FindSiteMapNode (string rawUrl) 這個方法 (Method) 就可以囉!
Continue Reading

[ASP.NET 2.0]SiteMapPath WebControl

有玩過或是正在玩ASP.Net2.0的朋友,相信對SiteMapPath這個WebControl有很大的興趣。
的確,SiteMapPath對製作網頁路徑有很大的幫助,但卻不得其門而入,除非從VS2005的「個人入門網站套件」(MS中譯)所抄錄出來,其實它的使用方法非常簡單,方法如下:
先於web.config中加入
[xml]



[/xml]
在siteMapFile指定SiteMap檔,在此是指定放置於根目錄下的web.sitemap
而SiteMap檔為一XML格式,格式如下:
[xml]< ?xml version="1.0" encoding="utf-8" ?>








[/xml]
siteMapNode就是指定網頁節點;Title是網頁標題;url是網頁位置;description是網頁節點說明

到網頁中放置一個SiteMapPath WebControl即可,完全不用寫任何程式
假如將SiteMapPath放置於ASP.NET2.0的新功能「主版頁面」(MS中譯,即MasterPage)中,更是方便
如果再加上TreeView來做網頁選單,在選單、網頁路徑你完全不用煩惱要寫程式,因為ASP.NET2.0…不!應該是說.Net Framework 2.0都幫你寫好了

有興趣的朋友可以試試看,很方便喔 ^^

[ASP.NET2.0] Custom WebControl – xHTMLEditor

由於工作上的需求,需要一個能在Web上編輯HTML的功能,找了半天,是有找到幾個啦,但都是要$$的,而且還不便宜勒… :S
後來在微軟MSDN上找到一個微軟提供的範例,再加上兩年前不知從哪得來(應該也是微軟)的HTMLEditor範例,將之簡化並改成WebControl的型態供ASP.NET2.0使用,使用方法請參閱內附的Readme.doc

檔案下載:xHTMLEditor.1.0.1.33014.rar(此版檔案版本號錯誤@@)

2005/07/26 Update:
檔案下載:xHTMLEditor.1.0.1.30389.rar(Size:31.32 KB)
1.新增兩屬性(Property)EditorLeftMargin、EditorTopMargin
2.修改ChooseColorPage屬性名稱,改為ColorPageURL
3.修正IconPath屬性在指定工具列圖示路徑的錯誤

ASP.NET 2.0

最近再使用ASP.NET 2.0製作公司新網站,發覺越來越好用、越來越方便了,不管是與資料庫的溝通、XML甚至於是物件(object),都很方便,只要物件拉一拉、參數設一設就可以了,不像以前再寫ASP或ASP.NET1.x的時代,需要寫一大堆程式段…
除了這個之外,以前在ASP時代無法做以及ASP.NET1.x需要寫很長的程式段的SQL Cache,在ASP.NET2.0已經完全支援了,有興趣的朋友,請上微軟的:MSDN 中文教學課程ASP.NET 2.0 線上教學課程

Copyright © 2017. Powered by WordPress & Romangie Theme.