台灣最大程式設計社群網站
線上人數
141
 
會員總數:245454
討論主題:189218
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 想請教asp net 控制項連動及驗證問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
想請教asp net 控制項連動及驗證問題
價值 : 20 QP  點閱數:216 回應數:12

樓主

tuobaling
門外漢
0 4
122 15
發送站內信

各位大大好:
因專案遇到webform中太多控制項,面臨必須拆頁顯示的狀況(原本9個usercontrol共上百個控制項);
導致兩個問題:
1.a頁面的a控制項無法控制b頁面的b控制項隱藏起來
2.無法一次驗證9個頁面上的控制項是否都已填寫

想很久,也花不少時間找資料,但都沒有找出可行的方案,
想請教大大能否提供方向或意見讓小妹參考。謝謝大大。

p.s.1-這支程式被使用者抱怨等待畫面時間太(2-3秒左右),所以需要改寫,
使用檢測工具發現程式大量使用viewstate(控制項、資料暫存...etc.),原本想壓縮viewsate,
測試下來速度也沒有比較快,只好拆頁處理。

p.s.2-原本想自訂類別存取所有控制項的值及驗證,被rejected掉,
只好再找其他可行的方案。






搜尋相關Tags的文章: [ asp .net ] ,
本篇文章發表於2020-01-07 16:27
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

tuobaling
檢舉此回應
另外想請教各位大大,還有其他方法可以加快畫面savesate及render的速度嗎?
本篇文章回覆於2020-01-07 16:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
原本9個usercontrol共上百個控制項

這樣龐大的控制項數量,寫在WebForm,那麼該畫面肥的程度可想而知

在想要怎麼解決之前
想先請教的是,一定要用WebForm處理嗎?
是否介意使用其他的方式混搭(例如SPA的開發方式)

^.^a
本篇文章回覆於2020-01-08 15:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

tuobaling
檢舉此回應
topcat 大大好:
非常謝謝您耐心地詢問,關於您的問題:
1.一定要用WebForm處理嗎?--是的,因專案架構關係,目前全部無法打掉重練。
2.是否介意使用其他的方式混搭(例如SPA的開發方式)--基本上不介意,您說的SPA開發方式我也會納入考量。
只要能夠達到改善效果,我都願意去嘗試。
本篇文章回覆於2020-01-08 21:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
整理一下您目前描述的問題先:
1.
這支程式被使用者抱怨等待畫面時間太(2-3秒左右),所以需要改寫

2.
原本9個usercontrol共上百個控制項


由於WebForm的體制是透過PostBack將畫面送回,並以ViewState來保留畫面中輸入的資料
所以
a.每次送回(PostBack)要送回上百個控制項的內容+ViewState的資料
b.每次送回後回應(Response)的內容,包含了整個畫面的所有上百控制項+ViewState的資訊

所以無論是Request(PostBack), Response的資料都會超大超多
速度與回應當然就會很久(這是WebForm先天體制的狀況)

如果要針對此畫面,有比較好的運作,可能要捨棄WebForm先天的機制(PostBack),而改以真正Ajax的方式(非UpdatePanel)來對應
也就是,不使用PostBack

當然,寫起來會相對辛苦很多(會有大量的Client端Script的撰寫)
您的系統架構依據是WebForm的專案
但是這畫面,卻不使用WebForm的PostBack機制,而是這畫面改寫用以Client端技術為主的Ajax開發方式
(等於是這個畫面,要進行全面的改寫。但是您原本專案中其他的畫面作業方式不變,只改這畫面的撰寫方式)

這樣的方向,您是否可以接受?

如果可以,再來細聊作法
^.^a
本篇文章回覆於2020-01-09 11:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

tuobaling
檢舉此回應
topcat 大大您好:
您的建議對我非常有用,能跟您請教真是太好了!
請您指導我作法!
另外再請教您一個問題:
1.您建不建議將這畫面拆分為好幾個畫面?
本篇文章回覆於2020-01-09 13:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
1.您建不建議將這畫面拆分為好幾個畫面?

不建議,維護上困難

---
既然您同意必需捨WebForm PostBack的做法
過程可能不輕鬆,您要有心理準備

前端如果跳過使用一些前端的framework(例如:vue.js, angular.js, ...)
利用【DOM物件與JSON雙向綁定】,寫起來會比較輕鬆些
但您還得學習那些framework的相關知識做法
所以這樣的方式我提到就好
放在心裡,以後有機會可以去接觸看看

建議的方式是,結合jQuery + jQuery Ajax + Html的表單物件(input, select, ...)
我先描述一下大致的方向

不知道您對於jQuery、還有jQuery的Ajax是否會使用?

我知道您的狀況,才能知道要描述多少,要提供那些參考
^.^a
本篇文章回覆於2020-01-09 14:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
大致的方向是
除了最後的送出

其餘的都不做PostBack
都使用Client端的jQuery+Html處理

由於沒有PostBack
畫面中使用者的輸入就直接保留在畫面中
畫面中如果需要動態取得資料與互動的內容
就透過Ajax呼叫後端的程式(可獨立寫WebAPI(建議),或者使用ASP.NET WebForm專案中的「泛型處理常式(ashx)」取得資料)

由於沒有PostBack
畫面沒有重整
由於透過ajax取資料,所以中間過程中的一下互動(例如:互動式的下拉選單)
與server間的只有資料的撈取而沒有畫面的傳送
Client端與Server端往來的資料會小非常非常多
(解決等待太久的問題)

至於輸入項目多,是否要分步驟,這一切也都是在Client端去處理區塊(div)的顯示與隱藏

甚至最後的送出,也可以透過Ajax的方式來處理
這樣就更不必處理畫面中輸入項目的保留

大致的方向是這樣子
您先理解看看,哪個部分不清楚請提出

^.^a
本篇文章回覆於2020-01-09 14:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

tuobaling
檢舉此回應
topcat 大大您好:
請問您說的jquery ajax 是否是指這個:
jquery ajax

不是的話,需向您請教;是的話,我有用過,不過程度很基礎,且當時是抓出所有頁面上控制項的值,然後用組字串方式再post到後端,
還需請您建議更好的處理方式。

p.s.1您說拆多頁處理維護上有難度,可否再請您說明一下呢?我比較笨,還請您包容,謝謝您。

本篇文章回覆於2020-01-09 14:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
您說拆多頁處理維護上有難度,可否再請您說明一下呢?


我認知的【多頁】是指多個ASPX(假設把畫面切成5個步驟,那就5個aspx
如果是這樣,如何讓這樣的多個ASPX相關的內容,一次送出維護?
另外,假設我分成5個步驟,所以有5個aspx
那麼彼此之間切換,資料的保存、彼此的互動(假設Page3的某個內容必須依據Page1的某個項目輸入的值來顯示不同的選項)
這撰寫開發、維護都不簡單
(不是做不到,是不好做)

如果您的【多頁】不是小喵描述那樣,那麼可能需要您說明清楚您心裡的那個多頁是怎麼個做法

^.^a
本篇文章回覆於2020-01-09 14:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

tuobaling
檢舉此回應
topcat大大您好:
謝謝您的提點我沒想到的地方,我了解維護麻煩的地方了。(事情果然不像傻子想的那麼簡單)
也謝謝您提供建議,讓我能朝正確方向可以去做改善。
本篇文章回覆於2020-01-09 15:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
其實沒有絕對的方法
可以多方討論、構思,去找出相對合適的方式進行
大家一起切磋學習
^_^
本篇文章回覆於2020-01-09 22:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

SAM
捐贈 VP 給 SAM 檢舉此回應
給喵大按讚…
本篇文章回覆於2020-01-10 17:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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