2012年10月25日 星期四

[C# ASP.Net] Client端資料當參數傳到新頁面


  如果有些資料不是很重要,又不想記在Server端時,就會把這些資料記在Client端。那如果想要在使用者動作後(按下按鈕)開啟新視窗,又要以儲在Client端的資料當參數帶到新視窗時可能得到一個錯誤訊息如下:

描述: 要求驗證偵測到具有潛在危險的用戶端輸入值,對這個要求的處理已經中止。這個值可能表示有人嘗試危害應用程式的安全性,例如跨站台的指令碼處理攻擊。若要允許頁面覆寫應用程式要求驗證設定,請將 httpRuntime 組態區段中的 requestValidationMode 屬性設定為 requestValidationMode="2.0"。例如: <httpRuntime requestValidationMode="2.0" />。設定這項值之後,您就可以停用要求驗證,方法是在頁面指令或 <pages> 組態區段中設定 validateRequest="false"。但是我們強烈建議您的應用程式應該明確地檢查所有這類的輸入。如需詳細資訊,請參閱 http://go.microsoft.com/fwlink/?LinkId=153133。


  在這些值可能被改的情況下,確認不會對網頁或其它資料有危險性時才可以讓這網頁不做驗證。讓網頁不做驗證的方式很簡單步驟如下:


1.Web.config檔加入
<system.web>
    <httpRuntime requestValidationMode ="2.0"/>
</system.web>

requestValidationMode 預設是4.0



2.在要開啟的新網頁<@ Page /> 中加入ValidateRequest="false"
表示這個網頁停止要求驗證

[C# ASP.Net] 在GridView Bind 資料之前做資料的過濾

        有時候從DB取出資料後想再對資料做些手腳,像是過濾、排序或者是只想秀出前幾筆的資料。這些都可以透過DataView來幫你完成。

        通常我取到的都是DataTable型態的資料,所以必需先把資料轉成DataView的型態資料,如下:DataView dataView = new DataView(dataTable);

  DataView型態的資料就可以有過濾、排序方法可以使用囉!


        過濾:
   過濾的用法就像是在SQL下Where指令一樣,例如:
                dataView.RowFilter = "UserName = '%Johnson%'";
            RowFilter就會找到CloumnName為UserName的資料列,比對內容為Johnson才會記在dataView中,其它的資料就會被移除。過濾後再指dataView指定為GridView的DataSource再Bind後就可以看到過濾後的結果了。當然也可以使用like來過濾含有指定字串的都要顯示,指令如下:
    dataView.RowFilter = "UserName like '%John%'";
這個就會列出UserName欄位中,只要含有字串John的都會被顯示出來。


        排序:
            可以使用Sort屬性,對單一或多個資料行做排序,並且可以加入ASCDESC參數。


        只顯示前幾筆資料
            如果有需要只顯示前幾筆資料的話,我使用的方法是Delete,例如我有100筆資料,只想顯示前50筆那就用Delete把第50筆之後的資料全部都Delete。範例如下:
        int showDataNum = 50;
        int rowCount = dataView.Count; //100筆
        if(rowCount > showDataNum)
        {
             for(int i = showDataNum; i < rowCount; i++)
                 dataView.Delete(showDataNum);
         }


2012年10月21日 星期日

實價登錄地圖

實價登入上線了,用實價登錄地圖可以很快又方便找到資訊。有需要買房的可以參考看看

[C# .Net] 頁面自動符合手機瀏覽器大小

在Head標籤中加入<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">頁面就可以依照手機畫面大小做自動縮放的功能!

[新聞 補助] 內政部育兒津貼

內政部從今年推出育兒津貼,對象是全台灣2歲以下新生兒夫妻只要其中一人沒工作年收入少於113萬,就可以申請每個月可請領每月新台幣2500元至5000元津貼。

[C# .Net] Get SVN Revision Number

在.Net或AP要把SVN的版本資訊寫入並在RunTime取得版本有以下幾個步驟

首先有幾個問題必須先知道
1.版本的資訊寫在哪呢?
2.怎麼在編譯時期把SVN的版本號寫入版本資訊中?
3.在RunTime時期怎麼取得版本資訊?

解決這三個問題就OK啦!

第一個和第二個問題在.Net和AP是用一樣的方法
下面就不一一列出解法了


1.版本的資訊寫在哪呢?
Ans:在你的專案下你可以發現一個Properties的資料夾,裡面有一個AssemblyInfo.cs檔,而版本資訊就寫在裡面囉!


2.怎麼在編譯時期把SVN的版本號寫入版本資訊中?
Ans:寫入版本可以透過建置後事件命令,來修改AssemblyInfo.cs檔的版本資訊,有以下幾個步驟:
1.在建置後事件命令輸入SubWCRev.exe "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfo.tpl.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

2.在Properties的資料夾新增一個AssemblyInfo.tpl.cs的檔案,檔案內容就Copy AssemblyInfo.cs的內容:


// 組件的版本資訊是由下列四項值構成:
//
//      主要版本
//      次要版本
//      組建編號
//      修訂編號
//
// 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號
// 指定為預設值:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.$WCREV$.0.0")]
[assembly: AssemblyFileVersion("1.$WCREV$.0.0")]


以此範例來說,版本資訊會顯示成1.SvnVersion.0.0
如此在建置後事件就可以改版本資訊了。


3.在RunTime時期怎麼取得版本資訊?
Ans:.Net取得的方法:Assembly.GetExecutingAssembly().GetName().Version.ToString();
          AP取得的方法:Assembly.LoadFile(Application.ExecutablePath).GetName().Version.ToString();

2012年10月9日 星期二

網頁上顯示特殊符號

  網頁上有些資料可能是動態從DB或其它地方取得然後在前台顯示,但是資料中有可能會有一些Html用的標籤,就會導致顯示出來的文字會有問題。所以在取得資料時就要先經過轉碼的動作來避免這個問題。

  
 
  轉碼可以到HTML常用的特殊符號這個網頁來找符號要轉成那個碼。例如&就要轉成&amp; 以此類推,這樣就能正常顯示等殊符號在網頁上囉!

        這個也可以用在寫XML註解的地方喔!




[C# .Net] TextBox限制只能輸入數字

在前端加入Script如下
<script type="text/javascript">
    function txtKeyNumber() {
        if (!(((window.event.keyCode >= 48) && (window.event.keyCode <= 57)) ||
            (window.event.keyCode == 13) || (window.event.keyCode == 46) ||
            (window.event.keyCode == 45)))
        //這段是判斷如果輸入的不是數字或小數點!那將無法輸入文字
        {
            event.returnValue = false;
        }
    }
</script>


然後再後端把想要限制的TextBox在他的Attribute加入一個OnKeyPress的事件會去呼叫上面的javascript即可!

txtOnlyNumber.Attributes.Add("OnKeyPress""txtKeyNumber();");






2012年10月2日 星期二

[SQL] delete all records and reset the auto increment value

當Table中有自動累加的欄位時,下命令Delete也是沒有辦法清除累加值的資訊,但是可以使用
TRUNCATE TABLE some_table
這個命令來完全的清除所有的紀錄,但是要切記,使用這個命令要格外小心。因為使用後就再也無法回復,而且也不會有任何紀錄!

用Cmd在IIS上裝.netFrameWork

以命令的方式裝.netFrameWork4.0

1. 先開啟命令視窗

2. cd c:\Windows\Microsoft\Framework\v4.0.30319

3. aspnet_regiis -i

等安裝完後再下命令重啟IIS
iisreset

2012年10月1日 星期一

[C# .Net] Server端 註冊Script到Client端 當被UpdatePanel包起來時

一般Server端要註冊Script到Client端時使用RegisterClientScriptBlock即可,如以下範例


ClientScript.RegisterClientScriptBlock(this.GetType(), "onSelectedNodeChanged","document.all.getElementById('" + ctrl.ClientID + "').visible=false;");


那如果有被UpdatePanel包起來時,使用上面的方式就會沒有任何效果!而必需改用下面的方式:

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DynamicResponseScriptBlock" + new Random().Next().ToString()"alert('hi');"true);





[C# .Net] server side dynamic add script in client side

    Server端動態加入Script到Client端的方式有很多,根據Script放置的位置不一樣,所使用的語法也會不同。

    以下範例為加Scrip到各區塊的語法(依上到下的順序):

HtmlGenericControl jqueryInclude = new HtmlGenericControl("link");
jqueryInclude.Attributes.Add("href""Styles/superTables.css");
jqueryInclude.Attributes.Add("rel""stylesheet");
jqueryInclude.Attributes.Add("type""text/css");
Page.Header.Controls.Add(jqueryInclude);

加在</head>的標籤之前


 RegisterClientScriptBlock
string scriptContent = "this is your script!!";
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "dynamicScript", scriptContent, true);

 

RegisterStartupScript
string scriptContent = "this is your script!!";
ScriptManager.RegisterStartupScript(thisthis.GetType(), "dynamicScript", scriptContent, true);