台灣最大程式設計社群網站
線上人數
556
 
會員總數:245113
討論主題:189027
歡迎您免費加入會員
討論區列表 >> ASP.NET >> Button 能不能先做事件!!!!!!
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Button 能不能先做事件!!!!!!
價值 : 50 QP  點閱數:241 回應數:15

樓主

黃柏翰
門外漢
0 2
40 7
發送站內信

請問我的Button能不能先做[事件]在進入[Page_Load]中!!
例如:

protected void Page_Load(object sender, EventArgs e)
{
if(c=1)
{事件;}
else
{事件2;}
}
protected void Button1_Click(object sender, EventArgs e)
{ c=1;}
protected void Button2_Click(object sender, EventArgs e)
{ c=2;}

搜尋相關Tags的文章: [ Button ] , [ postback ] ,
本篇文章發表於2019-11-01 17:37
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

黃柏翰
檢舉此回應
Init - > 動態產生 創建Master if(!page.IsPostBack){創建Detail}
Load - > if(做存入){創建Detail}
Button_click - > 1.存入 2.下一筆 3.上一筆 4.第一筆 5.最後一筆
LoadComplete - > if(做2.3.4.5){創建Detail}

我不知道我的方法是否有問題!!
因為我的Textbox 是動態產生 必須要在存入前先創建 Detail 抓到對應的Textbox!!
但是我如果要2.3.4.5的動作時要先+1或-1 才去顯示Detail。

感謝各位的觀看!!!如果有更好的意見或是我做錯什麼請指點我。
感恩大家的幫忙!!!
本篇文章回覆於2019-11-01 18:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

缺氧的羊:窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應
改放在 Page_PreRender

本篇文章回覆於2019-11-04 11:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

黃柏翰
檢舉此回應
回2# 感恩您的回覆!!
我想請問我TEXTBOX是動態產生放在Page_PreRender要怎麼記住我輸入的數值!
我在Init,Load 沒有特別去做這個動作。

問題二:Page_PreRender跟Page_LoadComplete 有什麼區別嗎?

補充:我的事件(存入資料庫)在Page_Load和Page_Init創立Master和Detail都能成功存入
 但寫在Page_PreRender或Page_LoadComplete 存入都是空值....
   請各位大大解惑感恩!!!!

本篇文章回覆於2019-11-04 13:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
我沒看到你的[存入資料庫]是怎麼寫的, 不曉得你遇到什麼問題...
===============================

google:【asp.net 事件順序】
https://jojosula001.pixnet.net/blog/post/161458889
===============================

就你目前的範例來看
c 是全域變數,
按下按鈕之後, 先執行page_load, 再執行事件(變更 c 的值),
之後再Page_PreRender 依照 c 的值, 來決定要走事件1, 還是事件2...
===============================

至於textBox動態產生, (請把動態產生textBox的部份維持在Page_Init)

只有存入資料庫(你的事件)放在Page_PreRender就好了
===============================

再看不懂的話請張貼實際程式碼
本篇文章回覆於2019-11-04 15:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
1.畫面的生命週期,不是自己可以變的,而是要在這樣的規則下,如何去運用
請參考91大的Page Life Cycle一文
https://dotblogs.com.tw/hatelove/archive/2009/12/18/pagelifecycle.aspx

2.動態產生控制項,應該要在Page的Init事件中產生
3.絕大部分的動態產生,都有機會改寫成預先安排控制項(透過Visiable控制是否顯示)

建議您,您描述一下,您小做什麼樣的效果(舉例)
小喵依據您的需求,給您小喵的做法

^.^a
本篇文章回覆於2019-11-04 16:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

黃柏翰
檢舉此回應
#4 感恩您的回覆!!
我仔細看過您給的連結資料了!!我會再嘗試看看有問題我在上來提問,真的很感謝

#5 感恩您的回覆!!
我想做到的效果:創建一個主明細表+副明細表,副明細表會隨著主明細表做更動,
功能分別為:存入,上一筆資料,下一筆資料,新增主\副明細表,刪除主副明細表。
以上功能分開來做都是已經成功的,但合起來就有些問題,我如果再Page_Init同時新增主副明細表,當我換按下一筆時資料會對不上
(因為先init後才做到click事件所以資料沒辦法對上)
所以我把按下下一筆資料所創建副資料表放在(Page_LoadComplete )中
這樣資料就可以對上了
但問題就是我沒辦法連續換資料(因為動態產生的id會重複導致無法生成)...



以下是我動態產生的內容....

本篇文章回覆於2019-11-04 18:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
有一招可以偷懶,也可以直接在page_load判斷你按下的button是哪一個。。。
.
.
.
.
在Page_Load,
各別對各個button的name,進行 Request
Request.Form[Button1.UniqueID]
Request.Form[Button2.UniqueID]
Request.Form[Button3.UniqueID]
Request.Form[Button4.UniqueID]
Request.Form[Button5.UniqueID]


看哪一個有值,就表示你按下了哪個按鈕,
.
.
【只是這種方式對你而言不算是好方法,欠下技術債,是要償還的】
本篇文章回覆於2019-11-05 01:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
我先很快的掃一下您的程式碼,還沒細看
發現這個



要提醒您的是
當網址有變動(您的QueryString參數有異動)
會導致ViewState失效,新網址,就是新的瀏覽,ViewState會全部重來
這點是您要注意的
此外,就是QueryString有相對較大的安全風險

不知道與您的問題是否有關,看到先提一下
^.^a
本篇文章回覆於2019-11-05 10:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
接著這個與您原來的問題無關
但是卻很重要(非常非常重要)


您用組字串的方式來組出SQL語法
同時也組出駭客可以動手玩你主機的漏洞出來
SQLInject
這是重大的安全疑慮
重大到除了資料庫任意被玩以外,駭客有心的話(您們主機的規劃又沒注意的話)
也可以用這個漏洞把裡的主機整個格式掉

請務必全部改寫成參數(Parameter)的方式來代入資料
本篇文章回覆於2019-11-05 10:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
您的程式碼
這一段


其實可以不用寫在Init中
寫在GridView的RowDataBound事件就可以
RowDataBound是你的GridView『每一筆』在『完成資料綁定』,觸發的事件
你的資料有10筆,再加上Head,就會觸發11次

所以Row的迴圈就不必寫
裡面的Cell迴圈,就搬到RowDataBound事件中
要區分是Head還是Data,記得要判斷一下RowDataType



本篇文章回覆於2019-11-05 11:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

黃柏翰
檢舉此回應
#7 感謝您的回覆!!
問題1.請問一下這樣我在Click事件需要給甚麼參數嗎?
我剛剛嘗試後按與不按都是 NULL所以無法判斷!!

問題2.請問一點上下兩個是否都能使用呢?



如果可以成功我先使用大大的方式應急!!
我會慢慢等參考資料再做修改我的程式!!
真的很感謝你們兩位的回覆!!



本篇文章回覆於2019-11-05 11:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應
就小喵而言
動態組控制項,是難寫又難維護的狀況

小喵自己能免則免

依據您描述的需求,應該可以不必動態產生控制項就可以做到

透過預先設定的Form代表主內容

明細的內容可用GridView預先使用TextBox,在GridView的RowDataBound中
透過e.Row.FindControl就可以找到預先安排的Text

GridView透過ObjectDataSource控制項的結合,他的條件可以指定是控制項(例如表單中的某個TextBox或者Label)
這樣上下筆改變後,只需讓GridView做DataBind就可以依據新的條件來取得資料

而資料的存取,全部寫在類別中的Function中獨立出去,透過ObjectDataSource設定綁定這些類別與Function

大概是這樣的方向
這樣系統維護起來會比較容易些

時間的關係,沒辦法細講這些怎麼做
大概是這樣的方向,您先思考看看

先把SQLInjection的問題解決,那個比起怎麼改怎麼寫更重要

^.^a
本篇文章回覆於2019-11-05 11:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
不錯的參考

缺氧的羊:窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應


請存成一個aspx檔, 試試看(我是用VB.NET寫的)
本篇文章回覆於2019-11-05 12:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

黃柏翰
檢舉此回應
#8.9.10.12 感恩您的回復!!!
有關SQLInjection我剛剛有搜尋了一下!!
我目前在修改中真的很感謝提醒!!

下面修改方式請問是正確的嗎?


#13 感謝您的回覆!!
目前已經用您的方式解決目前的問題了!!!

本篇文章回覆於2019-11-05 16:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
to 14樓, 那樣子寫是對的(防止SQL injection就是使用Parameters)
本篇文章回覆於2019-11-05 16:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.