2010年4月26日 星期一

ASP.NET 手動寫CallBack

此範列是參考董大偉老師的書ASP.NET 深度剖析
當textbox輸入48時,系統會查看資料庫是否已存在
沒有的話,顯示尚未啟用

當輸入至480,資料庫已存在此編號
則顯示此編號已存在

程式碼其實很簡單
.aspx程式加上
<script type="text/ecmascript">
function ReceivedData(dat) {
document.getElementById("Label9").innerHTML = dat;
}
</script>
Label9即為畫面上的結果

public partial class apply : System.Web.UI.Page
, System.Web.UI.ICallbackEventHandler
{
String ret = String.Empty;
protected void Page_Load(object sender, EventArgs e)
{
this.TextBox1.Attributes["onkeyup"] = ClientScript.GetCallbackEventReference(this, "document.all." + this.TextBox1.ClientID + ".value", "ReceivedData", "");
//讓此textbox每輸入一個字,就到資料庫查詢字串是否存在
}
public String GetCallbackResult()
{
return ret;
}
public void RaiseCallbackEvent(String eventArgument)
{ //eventArgument為事件的值,也就是使用者在textbox上輸入的值
try
{
apply_1 check_exist = new apply_1();
String message = String.Empty;
message = check_exist.search002(eventArgument);
if (message == "已存在")
{
ret = "此編號已存在!";
}
if (message == "未存在")
{
ret = "此編號尚未使用!";
}
}
catch (Exception ex)
{
log writelog = new log();
writelog.WriteDebugLog("apply", "RaiseCallbackEvent()", ex.Message);
}
}

ps:此功能懂javascript的人能輕易的寫出,個人認為是否真需要有CallBack這東西?

使用畫面Refresh 避免session遺失

原本session時間是設定在這
<sessionState mode="InProc" cookieless="false" timeout="6000" />
但發現根本沒反應 session一樣會遺失(約20分鐘)
只好自已想辦法
在每一頁放進一個iframe
<iframe width="0" height="0" src="SessionKeeper.aspx"></iframe>
並在此iframe放入
<title>SessionKeeper</title>
<meta http-equiv="refresh" content = "600" />
(600秒畫面自動刷新一次)
發現蠻多人遇過此問題

2010年4月25日 星期日

Web.config 加密

加密:
aspnet_regiis.exe -pef "connectionStrings" "C:\Users\spring\Documents\Visual Studio 2008\ARFQ\ARFQ\ARFQ.Web" -prov "DataProtectionConfigurationProvider"

解密:
aspnet_regiis.exe -pdf "connectionStrings" "C:\Users\spring\Documents\Visual Studio 2008\ARFQ\ARFQ\ARFQ.Web"

2010年4月19日 星期一

抓畫面上滑鼠點下的座標,並show出元件

<!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 runat="server">
<title></title>
<script type="text/javascript">
function Hide(flag){
if (flag == 1)
document.getElementById("div1").style.display = "";
document.getElementById("div1").style.left = event.clientX;
document.getElementById("div1").style.top = document.body.scrollTop + event.clientY;
if (flag == 0)
document.getElementById("div1").style.display="none";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>

<div id="div1" style ="display:none;border: 1px solid #A1A31B; position:absolute; height:40px; width:40px; background-color:#FFFFEB; ">
測試
</div>
<input id="Button1" type="button" value="pop.................................................." onclick="Hide(1);"/>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

2010年4月13日 星期二

TOOLS倒檔預存程序

DECLARE @Main_Obj numeric(18, 0),@Tool_Warehouse varchar(50),@Component_No varchar(50)
DECLARE center CURSOR FOR

SELECT [Object_Id]
,[Tool_Warehouse]
,[Component]
FROM [BusinessQuotation].[dbo].[Main]

OPEN center
DECLARE @NU numeric(18, 0)
DECLARE @SNU VARCHAR(5)

FETCH NEXT FROM center INTO @Main_Obj,@Tool_Warehouse,@Component_No
WHILE @@FETCH_STATUS = 0
BEGIN
SET @NU=1

WHILE @NU<= @Component_No
BEGIN
IF (@NU<10)
BEGIN
SET @SNU='00'+CAST(@NU AS VARCHAR)
END
ELSE
BEGIN
SET @SNU='0'+CAST(@NU AS VARCHAR)
END
INSERT INTO [BusinessQuotation].[dbo].[Component_File]
([Tool_Warehouse],[Main_Obj],[Component_No])
VALUES
(@Tool_Warehouse,@Main_Obj,'C-'+@SNU)

SET @NU=@NU+1
END

FETCH NEXT FROM center INTO @Main_Obj,@Tool_Warehouse,@Component_No
END
CLOSE center
DEALLOCATE center