2013年9月30日 星期一

[轉貼] 動態註冊JavaScript至Client端

出處:http://welkingunther.pixnet.net/blog/post/27831277

因為JavaScript是直譯語言,所以有時JavaScript的位置不同會有所不同的影響
這邊介紹三種方法
Page.ClientScript.RegisterClientScriptBlock
Page.ClientScript.RegisterStartupScript
Page.ClientScript.RegisterClientScriptInclude
以下是三種方法的差別
//Block的是將JavaScript寫到Client端HTML裡的<form>下面
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "test1", "function Hello1(){alert('這是Block');}", true);

//Startup的是將JavaScript寫到Client端HTML裡的</form>上面 
Page.ClientScript.RegisterStartupScript(this.GetType(), "test2", "function Hello2(){alert('這是Startup');}", true);

//Include的是將JavaScript寫到Client端HTML裡的<form>下面 
Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "test3", Page.ResolveUrl("~/myscript/cool.js"));
這個cool.js的內容是function Hello3() { alert('這是Include'); }

拉一個Asp.net的Button,設定onclientclick="Hello1()"就可以呼叫上面的Hello1()或Hello2()或Hello3()

最後補上產生至Client端的HTML碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="Default3.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMjA0OTM4MTAwNGRk3NA1059Lb5lxBBIrLbEvSBZoXPM=" />
</div>

下面這行是Page.ClientScript.RegisterClientScriptBlock產生的
<script type="text/javascript">
//<![CDATA[
function Hello1(){alert('這是Block');}//]]>
</script>

下面這行是Page.ClientScript.RegisterClientScriptInclude產生的
<script src="/asptest/myscript/cool.js" type="text/javascript"></script>
<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKY7vG1DwKM54rGBjWTeFqv66eWS6quxOyCE/m7DVHC" />
</div>
    <div>
   
    </div>
    <input type="submit" name="Button1" value="Button" onclick="Hello3();" id="Button1" />
   
下面這行是Page.ClientScript.RegisterStartupScript產生的
<script type="text/javascript">
//<![CDATA[
function Hello2(){alert('這是Startup');}//]]>
</script>

</form>
</body>
</html>

2013年9月17日 星期二

[轉貼] 使用TableAdapter時,遇到資料欄位為Null處理方式

出處:http://www.dotblogs.com.tw/jaigi/archive/2013/06/30/106396.aspx


最近遇到使用TableAdapter進行資料讀取的系統,一般來說透過這樣方式去查詢資料並無太問題。但是,由於
資料是其他單位負責,於是透過Linq去讀取時,卻發生下面問題:
The value for column \'VXXXXX\' in table \'Adapter\' is DBNull.
主要原因是因為讀取此資料集時,裡面有某個欄位的資料是NULL,非空白,因此,造成資料Query出現異常。
大致語法如下:
1using(XXX.XXTableAdapter tt=new XXX.XXTableAdapte())
2{
3   var SS=from a in tt.GetData().AsEmunable()
4               select new { A1=a.A1, B2=a.B2  }
5   Foreach(var g in SS)
6  {
7     Console.write(g.A1);  
8   }
9}
且同時我們也不想讓有Nuu的資料,因此,會在加入Where條件,但是,加入Where條件等於NULL或是等於空白似乎無效。
依舊會出現Excelption。此時,就可以作法就是我們可以在資料集 (*.xsd)檔案中,去修改欄位的屬性。
1.首先找到我們的資料表以及會產生NULL資料的欄位,這邊以Month欄位為例
image
2.針對此欄位屬性去做設定。
image
這邊要修改地方有兩個,第一個是將AllowDBNull設定為True,另外,要設定NullValue時回傳值,原來預設是Exception,
所以,當查詢資料遇到欄位有NULL就會出錯,因此,我們這邊可以設定為Empty。當這樣設定好,之後再去將Linq語法做修正
3.修正Linq語法,在語法中加入Where條件,濾掉Month是Empty的就可以。
01using(XXX.XXTableAdapter tt=new XXX.XXTableAdapte())
02{
03   var SS=from a in tt.GetData().AsEmunable()
04               where a.month !=string.empty
05               select new { A1=a.A1, B2=a.B2  }
06   Foreach(var g in SS)
07  {
08     Console.write(g.A1);  
09   }
10}
以上就可以順利的查詢資料了。