台灣最大程式設計社群網站
線上人數
2205
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> ASP.NET >> treeview multiview
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
treeview multiview
價值 : 30 QP  點閱數:926 回應數:21
樓主

小裕
初學者
137 205
3228 388
發送站內信

請教一個想達成的功能,
我的登入頁面切了三個frame
左側的樹狀是讀取資料庫的階層資料,呈現使用者的權限功能
我想要在right的頁面接收樹狀點選那個功能,mutiview的tab去呈現他的程式名稱,同時顯示url網頁.
tab頁籤可開啟多個(也可關閉),切換不同程式功能,頁面功能也不同.

請問有人有寫過類似的功能嗎?
應該如何下手呢?



====================================================================================
default.aspx

====================================================================================
main.aspx


main.aspx.cs


搜尋相關Tags的文章: [ treeview multiview ] ,
本篇文章發表於2019-06-13 16:09
1樓
作者回應

小裕
檢舉此回應
我先行嘗試在treeview事件下將選到的值
傳到top頁面,但接不到值.
===================

main.aspx.cs


Refresh.aspx.cs
本篇文章回覆於2019-06-14 16:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小裕
檢舉此回應
測試後如果treeview不是動態產生的就正常可以跑,
爬文後發現是NavigateUrl 的問題,所以直接導url,不會觸發,
拿掉後,應該就有postback的動作,但還是抓不到treeview 選定的值

==================================

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

小裕
檢舉此回應
回歸當初想問的問題,我想我是否應該朝javascript+CSS的方式去克服這樣樣的問題,
樹狀選單是動態產生的,我想按下選單功能時,將他的名稱記錄下來,顯示在上層,個tab標籤的名字就是樹狀選單的名稱,
每按一次新的選單功能就會產生一個tab,

現在想要除了上層的tab頁籤呈現以外,當按下tab頁籤時,他還會去開啟不同的url,顯示在右側.

有人有這方面的範例可以看嗎?
可以解惑一下嘛?感謝!
本篇文章回覆於2019-06-18 17:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

想睡覺
檢舉此回應
建議 用javascript 或jquery 來做
以下是我的 jquery 寫法


這是處理動態產生的asp.net cs 檔

您參考看看
本篇文章回覆於2019-06-19 12:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

想睡覺
檢舉此回應
補充說明 我也遇到和你一樣的問題,想了一下 覺得 還是用jquery來寫
因為會這麼做的原因是 asp.net 有POSTBACK的關係,每次按 都會刷新,且我是因為上傳檔案的關係, 不想使用者每點一次增加欄位的按鈕時,將原本選好檔案的資料刷新,才會利用 JQUERY APPEND 的寫法
本篇文章回覆於2019-06-19 13:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

小裕
檢舉此回應
後來我用.net 的方式是可以抓到node的text了,也可傳到上層frame,
但每次都在postback覺得這方法不好.

jquery不太熟,還在了解,
我有找到這個範例,改成類似我要的,這個是寫死的tab做法
現在努力了解如何讓 treeview點選時
該頁的a href網址是treeview的url,li的文字也是從treeview來.




本篇文章回覆於2019-06-19 14:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
TreeView其實有很多jQuery寫好的套件可以使用
https://www.jqueryscript.net/blog/Best-Tree-View-Plugins-jQuery.html

切frame的方式其實大部分套版的方式都不再使用了
而比較新的方式會設計成響應式的話面(隨著螢幕大小會自動有不同呈現的方式)

比較常見的是Bootstrap這個套件
比如說這個
Bootstrap Nav Tab
https://bootstrap.hexschool.com/docs/4.2/components/navs/

^_^
本篇文章回覆於2019-06-19 19:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

小裕
檢舉此回應

現在我整個架構已經用frame的方式處理了,點選左側樹狀功能選單,右側呈現功能,
現在想做成像圖這樣的功能,每點選樹狀功能,上層呈現一個tab,功能則顯示在右側,

我現在這樣一次只能開啟一個url,介面上並不是很方便,所以才想要嘗試做這樣的功能.

本篇文章回覆於2019-06-20 08:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
現在我整個架構已經用frame的方式處理了

現有架構已是如此,那還是繼續這樣維護

現在想做成像圖這樣的功能,每點選樹狀功能,上層呈現一個tab,功能則顯示在右側,
我現在這樣一次只能開啟一個url,介面上並不是很方便,所以才想要嘗試做這樣的功能.

#3
每按一次新的選單功能就會產生一個tab,

現在想要除了上層的tab頁籤呈現以外,當按下tab頁籤時,他還會去開啟不同的url,顯示在右側.

有人有這方面的範例可以看嗎?
可以解惑一下嘛?感謝!


您所說的tab,是指圖片中『首頁、登入者建..、使用者權..、員工資料..』
這個嗎?

如果是
綜合您上面的描述
比較知道您想做的是什麼

tab這部分是一個frame(一支aspx)嗎?

小喵要做,可能這樣
1.讓tab的部分獨立一個frame,指定id,假設id是frmTab
2.然後treeView的網址,帶參數(畫面代號),Target指向frmTab
3.該frame的頁面程式,收到TreeView傳來的參數,再來決定新增一個新的Tab還是切換到現有已存在的tab
4.然後再觸發一個超連結Target為下方的Frame,依據2.所帶過來的話面代號,取出真正的網址,讓下方的frame導向到該網址(這部分要用JavaScript由上方的頁面,指定下方的Frame要轉址到哪個網址

大概是這樣的處理方式

^_^

這架構維護起來不容易∼
辛苦了∼
^.^a
本篇文章回覆於2019-06-20 11:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

小裕
檢舉此回應
那我的想法跟topcat您的方向是相同的,
只不過好多東西都要克服,
特別是你提的第三點

如下的寫法,能找出點選的文字跟URL
但傳過去的部分,要tabs顯示就不太知道要如何處理了,
這樣是要每點一個功能就加一個tab,相同的話就跳到該tab
然後才能執行你說的第四點.


tab這部分是一個frame(一支aspx)嗎?是的

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

topcat
捐贈 VP 給 topcat 檢舉此回應

3.該frame的頁面程式,收到TreeView傳來的參數,再來決定新增一個新的Tab還是切換到現有已存在的tab



這部分有幾個東西要處理
3a.首先是狀態的保留
如果我處理,可能會趨向使用WebStorage或者Cookie來保留狀態
取得傳入的參數後,取出WebStorage的狀態,然後逐一比對是否有這次的畫面
如果有,加上 Selected之類的註記,然後再迴圈把所有的內容顯示成tab
3b.哪個要顯示主要,這部分透過CSS處理
3a逐一產生Tab相關時,有註記Selected的那個,在Css中加上tab-Selected之類的css設定
例如:


然後是4.下方轉址
類似這樣


這是大致的想法,提供您參考
^_^
本篇文章回覆於2019-06-20 13:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

小裕
檢舉此回應
TO topcat:
在請教您一些問題:
我現在點選樹狀功能,然後值傳到top頁面,
接值部分可以接到,也可顯示tab了,
但現在只是單一個而已,

現在是要能呈現多個,

我是用viewstsate想去記錄點選的值,
然後將自串組起來,最後用迴圈方式去顯示tab
這樣方式對嗎?

組起來的字串是否會像:

A,B,C,D
點了ABCD四個功能
這部分我應該如何去處理呢?





=====================
left.aspx


</pre>
===========================

.aspx

================
.cs

<pre lang="c#">
if (!IsPostBack)
{
ViewState["view_tabs"] = "";
//pname.Text = "";
//string v_tabs = "";

if (Request.QueryString["Param"] != null)
{
// pname.Visible = true;
pname.Text = Request.QueryString["Param"];
purl.Text = Request.QueryString["url"];
ViewState["view_tabs"] = pname.Text;
//ArrayList categoryIDList = new ArrayList();
string categoryIDList = (string)ViewState["view_tabs"];
string tmpStr = string.Empty;

if (categoryIDList != null )
{

tmpStr += "'" + categoryIDList + "'" + ",";

tmpStr = tmpStr.TrimEnd(',');
Response.Write(tmpStr);

}
}

}
本篇文章回覆於2019-06-21 16:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
我是用viewstsate想去記錄點選的值,
然後將自串組起來,最後用迴圈方式去顯示tab
這樣方式對嗎?


ViewState 他的生命週期在這個頁面進入後開始
當這個網址變了,頁面跳轉了,生命週期也就結束了

因此,當您每次網址,帶入不同的QueryString,對ViewState而言每次都是一個新的生命週期

所以,ViewState不適合您目前的模式,因為他無法記住之前的狀態

因此小喵才會在#11
提出用Cookie或者WebStorage這種存在Client端的狀態存放機制來處理

^_^
本篇文章回覆於2019-06-21 19:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

小裕
檢舉此回應
topcat可以指導一段嗎?一直弄不出來
當我每點一次,值傳過來,
記錄一次,放到cookie,
假設我點了N次
值分別為A,B,C,D,E,F,G

過程:
點B的時候,A為上一次點過被記錄(開兩個tab)
字串組起來應該為A,B?
點C的時候,A,B為之前點過被記錄
字串組起來應該為A,B,C?

所以我是要迴圈將cookie的value相加對嗎?(但如果點了最後一個,還要cookie去紀錄嗎?不就本身傳過來的值而已)
這段我一直不知道如何寫?




========================

本篇文章回覆於2019-06-24 16:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
先說記錄
假設我用JSON字串來記錄,首次點了A,記錄了

接著點B,於是記錄了

接著點了C,於是記錄了

接著點了B,沒有新增,但被選擇換成了B
所以


到這樣可以理解嗎?

^_^


本篇文章回覆於2019-06-25 16:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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