最近接觸了一個c#的專案,基本上是MVC結構,是基于asp.net的web專案。view層是多個cshtml檔案構成(基本可以認為是以前的aspx檔案),controller層由多個cs檔案(c#代碼)組成,資料層這里暫不討論。
這個專案是這樣的,我大概看了一下,view層的cshtml檔案里面比如某個按鈕會鏈接到js檔案中的某個函式,然后這個函式會提交post請求或者get請求,然后就會鏈接到controller層的cs檔案中的那個對應的函式了,之后就是資料處理然后回傳。
現在有以下幾個困惑:
1,我不知道上面講的這個流程是不是現在web開發中主流的一個前后端互動程序?
2,基于java web的jsp技術是不是也是類似于上面.net這么一個流程?jsp檔案是不是就是對應于.net中的cshtml檔案?不過網上說,jsp檔案會包含java代碼,但我在cshtml檔案中完全沒找到c#的代碼,要么就是html,要么就是js
3,如果jsp檔案中會夾雜著大量的java代碼,那這個view層和controller層豈不是粘在一塊了?難道不應該是jsp檔案呼叫js,然后js呼叫服務器端controller層中的java檔案這樣一個流程嗎?
4,如果說3問題中的確是jsp檔案中包含大量java代碼,那的確是沒有很好的解耦,那我剛剛說的那個.net的專案,這樣的一個流程是不是意味著前后端解耦的還不錯?
5,我有點納悶的是,為什么那個.net專案中,我一個html檔案都找不到,全都是cshtml檔案,然后還有大量的js檔案,和cs檔案(c#代碼)。
謝謝各位了,我其實是個剛進入web開發這個大海里的一個菜鳥
uj5u.com熱心網友回復:
1、其實就是mvc了,這個流程應該是目前web開發的主流。2、jsp其實對應于aspx,cshtml是充當mvc中的視圖部分。jsp可以嵌入java,aspx也可以嵌入c#,cshtml也可以嵌入c#。
3、jsp本來就允許嵌入大量java代碼,所以java web中一般用servlet作為controller,jsp只充當視圖部分,并且要求盡量少的嵌入java代碼。jsp中可以有大量js,并使用ajax與后臺servlet互動。
4、jsp包含大量java,確實不是很好的解耦。所以java web開發引入了struts spring hibernate或者spring mvc mybatis這樣的框架,實作mvc。對應的,微軟推出的asp.net mvc就是mvc框架的實作。
5、這就是asp.net mvc的設計思想。cshtml可以通過razor語法在頁面中輸出c#物件,而html不行。
uj5u.com熱心網友回復:
謝謝回答,如果jsp或者aspx中包含java代碼或者c#代碼,是不是就必須放在服務器端運行一下然后再回傳給瀏覽器?那如果不包含的話呢,是否就意味著它們只充當view部分,可以直接被瀏覽器決議,不需要在服務器端運行?但我記得html檔案中也可以包含js代碼,那html檔案豈不是也可以來做view層?uj5u.com熱心網友回復:
web 開發的“主流”核心架構是用戶互動,而不是什么“前后端互動”。前后端互動是b/s 互動技術概念,它必須隨著用戶互動需求(也就是 Web2.0、web3.0......)和通訊技術不斷演進。許多人忽略了編程設計重點,而糾結底層的一點東西,這個時候爭論“主流”就可能跟不上形勢。比如說web服務器端的 mvc 開源框架在很早就出現,asp.net mvc 也是模仿10幾年前的 struts,而在 java 中也有很多種 mvc 形式(而 asp.net 因為比較封閉所以只有一種)。而 java 始終沒有什么類似 webform、asp.net ajax 服務器端控制元件 那樣的幾十個企業級服務器端控制元件。雖然這些都過時了,但是過去就是如此,asp.net 在看到服務器端控制元件的模式整體要被拋棄的時候,也沒有什么新東西拿出來。所以這些都不是什么新的東西。
在 view 中的所有資料系結的東西,你都可以說是 c# 的。只不過是語法跟 .cs 檔案中的代碼的語法不同罷了。你不能說 view 中只有 html 和 js。不論是 html 還是 js 都不是在服務器端渲染和執行的,所以 view 模板使用來動態系結輸出 html 給瀏覽器端的。
mvc 是最簡單的一個概念。controller 處理 <form action=...> 的請求,然后系結 view 產生 html輸出給瀏覽器端。你只有先學會了 html/css/javascript 網站應用編程,才能學好 web 服務器端編程。這個時候其實就是通過這種 <form action=.....> 提交和反復一遍遍重繪頁面的形式來處理。實際上我們可以看到,富客戶端 web 編程根本不走這個方式,所以 asp.net mvc 其實對于這種 web 應用系統開發是沒有什么用處的。但是假設你被微軟的熱情沖昏了頭腦,可能以為富客戶端的應用也靠asp.net mvc 編程。
回到你的“解耦”的問題,Controller 是用來接收 <form action=.....> 提交的資料的,這里僅僅是接收前端表單資料,然后 Controller 就產生了資料轉換來計算出輸出的資料。然后找到對應的 View 來系結輸出資料到產出的 html 代碼上。你說這有沒有解耦?
只不過 mvc 其實誰最簡單的框架,沒有多少技術深度的東西,所以你覺得不相信它如此簡單。
你的最后一個問題,要知道asp.net或者 jsp 之類的都是動態html 生成語言,它自然是產生 html 輸出的工具。你只知道去找靜態 html 檔案是不對的。
uj5u.com熱心網友回復:
cshtml就是視圖view部分。當中可以嵌套C#代碼。
至于你說的是否捆綁在一起。其實cshtml中的C#代碼,只是控制model或者viewmodel資料的顯示或者少許的邏輯判斷。
uj5u.com熱心網友回復:
這就跟前端 web 應用模式有關。你如果學習的 web 應用是不走 <form action=....> 這種表單提交、重繪整頁面的形式,你就在另外一個廣闊天地中遨游,而你問的問題始終是服務器端 mvc。
實際上富客戶端是前端獨立的應用程式,比如說2個小時也不重繪一次頁面。那么其前端模板、資料、樣式、js代碼等等,都可以通過 ajax.get 或者 websocket 等等等等通訊形式拉取到前端(瀏覽器運行時),在前端處理。此時直接拉取 html 片段當然是最好的,為什么還要服務器端 asp.net 程式產生 html 呢?
于是,你的問題其實就應該是,“前端View應該直接使用 html檔案”。而且這些 html 檔案其實不需要是完整網頁,是一些片段 html 就可以了。例如在一個頁面上可以用
<div my-binding="template:{name: xxxx, data: yyyy, if: zzz>100}"></div>這樣前端框架就能在zzz大于100時就去自動下載xxxx模板,放到 <div>里邊,跟資料 yyyy系結在一起(10幾行html代碼可能系結出上千行 html 代碼);當zzz<=100時前端框架又會自動清空<div>中的內容。而且頁面上可以有許多這樣的模板系結,模板中可以嵌套模板。頁面是組件化的。所以你說的 View不但可以使純 html,而且是片段html,而且頁面上可以重復使用相同模板,可以在頁面上作為組件來隨意搭積木、卡榫卯一樣地動態搭在一起。
但是要知道這些都是前端框架知識。而此時 asp.net 端的代碼沒用。
uj5u.com熱心網友回復:
許多人以為“我可以用 asp.net 來撰寫用戶體驗超好的web應用程式”,其實這里就是有歧義的東西。asp.net 并不包含那些知識。MVC模式就是用來處理 <form action=....>表達提交、然后重繪頁面的。所以這不是富客戶端編程模式。比如說我們在一個很“長”(可以無限下拉)很酷的頁面中讓用戶選擇和試看電影,然后用戶一旦付費看一個電影,我們需要跳轉到一個電影播放頁面,那么我們在前一個頁面中使用 ajax 或者 websocket 通訊方式向服務器下訂單,然后直接使用
window.location.href = .........play?id=......重定向頁面就行了,這個程序并不需要提交 <form action=....> 表單。甚至,其實我們可以是單頁面 web 應用,所有功能都不重繪頁面,而是動態模板自動展示。
你的問題可能本身的需求就是直指富客戶端編程框架,而表面上你又糾結在 asp.net 的 Controller 和 View 上了。
uj5u.com熱心網友回復:
要想從用戶體驗出發,開發大型 web 應用,那么對不起,你必須前端解耦。而不是在 asp.net 服務器端去過分去分層。
uj5u.com熱心網友回復:
謝謝回答。你的意思是富客戶端不需要一遍遍重繪,直接用ajax來獲取資料并且由js來負責更新。這個我感覺就是解耦了吧,html和js來當view層(view層不包含任何后端的代碼),服務器端代碼做m層和c層,這樣不就是mvc的一個概念嗎?我前端html和js學過一點,后端的java和c#也學過一點,但唯獨就是兩者結合起來構成一個網站的運作這方面我還是空白,所以有些地方概念不是很清楚,還請多多指教uj5u.com熱心網友回復:
啊...我一直以為view層就是前端頁面啊,難道我理解錯了?uj5u.com熱心網友回復:
我所理解的view層就是前端頁面的html和js這些東西,然后m層和c層就是服務器端的c#代碼,我以為,只要view層不包含除了html和js以外的瀏覽器不認識的代碼,就算是解耦了,mvc做不到這樣嗎?uj5u.com熱心網友回復:
做不到,我現在自己正在開發一個這樣的架構,就是你所說的前端只有 html、css、js 等等。
現在的 angular、react、vue 其實前端就是 html,不過也要加上系結資料的代碼。
你的想法很好。
uj5u.com熱心網友回復:
我所理解的view層就是前端頁面的html和js這些東西,然后m層和c層就是服務器端的c#代碼,我以為,只要view層不包含除了html和js以外的瀏覽器不認識的代碼,就算是解耦了,mvc做不到這樣嗎?
許多人以為“我可以用 asp.net 來撰寫用戶體驗超好的web應用程式”,其實這里就是有歧義的東西。asp.net 并不包含那些知識。MVC模式就是用來處理 <form action=....>表達提交、然后重繪頁面的。所以這不是富客戶端編程模式。
比如說我們在一個很“長”(可以無限下拉)很酷的頁面中讓用戶選擇和試看電影,然后用戶一旦付費看一個電影,我們需要跳轉到一個電影播放頁面,那么我們在前一個頁面中使用 ajax 或者 websocket 通訊方式向服務器下訂單,然后直接使用window.location.href = .........play?id=......重定向頁面就行了,這個程序并不需要提交 <form action=....> 表單。甚至,其實我們可以是單頁面 web 應用,所有功能都不重繪頁面,而是動態模板自動展示。
你的問題可能本身的需求就是直指富客戶端編程框架,而表面上你又糾結在 asp.net 的 Controller 和 View 上了。
做不到,我現在自己正在開發一個這樣的架構,就是你所說的前端只有 html、css、js 等等。
現在的 angular、react、vue 其實前端就是 html,不過也要加上系結資料的代碼。
你的想法很好。
uj5u.com熱心網友回復:
系結資料的代碼指的是?但我看這個專案里面,cshtml檔案里面的確是只有html和js,沒別的種類的代碼了,這樣和服務器端互動不就靠ajax和post還有get,不就行了嗎?
那你的專案可能是采用ajax來異步獲取資料。然后在success中進行html的操作。
如果你說前臺只是css+html+js的話,那也無可厚非。
其實這種方式,就想現在許多的 html+webapi和 hbuilder+webapi都是一樣的。
只是在前臺操作資料的方式,從C#操作model,變為了js來操作json。那既然這樣,你又何必使用asp.net的mvc框架呢。看起來你其實根本不需要用到razor引擎。
uj5u.com熱心網友回復:
系結資料的代碼指的是?但我看這個專案里面,cshtml檔案里面的確是只有html和js,沒別的種類的代碼了,這樣和服務器端互動不就靠ajax和post還有get,不就行了嗎?
那你的專案可能是采用ajax來異步獲取資料。然后在success中進行html的操作。
如果你說前臺只是css+html+js的話,那也無可厚非。
其實這種方式,就想現在許多的 html+webapi和 hbuilder+webapi都是一樣的。
只是在前臺操作資料的方式,從C#操作model,變為了js來操作json。那既然這樣,你又何必使用asp.net的mvc框架呢。看起來你其實根本不需要用到razor引擎。
uj5u.com熱心網友回復:
額,我表示。對于剛接觸的人就寫別在乎什么了,把東西弄出來了,有概念了在說完全沒有概念的話,在去講什么工程化,流程化,解耦一類的都是沒依據的。
沒有目標,沒有方向,沒有實踐的只單單在XX園看幾篇忽略目標,忽略方向,忽略實踐的所謂“優化”“工程化”“性能云云”的文章都是沒意義的。
我們看這類文章首先看的是,歷史遺留分析,改造思路,而不是看那個結論,那些結論在拋掉前提的情況下完全沒有意義
uj5u.com熱心網友回復:
包括樓上sp1234說的那些,那都是他經歷過這么多年的實踐,對各種流派演化實踐得的結論這些結論對于有同樣經歷和背景的人有意義,對于你這樣還沒開始做,就在糾結的人并沒有意義
uj5u.com熱心網友回復:
1、是2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
uj5u.com熱心網友回復:
另外你的問題其實也是歷史遺留問題,你用的是asp.net,是jsp。你生成的工程專案實際上是“上一代”工程專案,你在糾結上面那些人跟你講的“最新一代”技術怎么跟你“上一代”的工程專案完全不一樣?在你上一代里,你去講view檔案夾,control檔案夾,model檔案夾。
而在新一代的專案了,其實根本就沒有這些檔案夾了,他們可以是3個工程,3個專案。
uj5u.com熱心網友回復:
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
uj5u.com熱心網友回復:
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味uj5u.com熱心網友回復:
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?uj5u.com熱心網友回復:
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛 在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?uj5u.com熱心網友回復:
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
uj5u.com熱心網友回復:
但是第一次請求這個網頁的時候,還是得需要服務器端來處理的,接下來就可以全靠ajax了
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
uj5u.com熱心網友回復:
但是第一次請求這個網頁的時候,還是得需要服務器端來處理的,接下來就可以全靠ajax了
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
不是這樣理解的。都得服務器來處理,我的意思是不需要寫 razor,就是 @ 啊 <% %> 之類的標記。
uj5u.com熱心網友回復:
你的意思是cshtml檔案里面必須要寫c#代碼?我感覺不用啊,我ajax之后得到的資料交給js去更新web頁面不就行了嗎?
但是第一次請求這個網頁的時候,還是得需要服務器端來處理的,接下來就可以全靠ajax了
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
不是這樣理解的。都得服務器來處理,我的意思是不需要寫 razor,就是 @ 啊 <% %> 之類的標記。
uj5u.com熱心網友回復:
你的意思是cshtml檔案里面必須要寫c#代碼?我感覺不用啊,我ajax之后得到的資料交給js去更新web頁面不就行了嗎?
但是第一次請求這個網頁的時候,還是得需要服務器端來處理的,接下來就可以全靠ajax了
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
不是這樣理解的。都得服務器來處理,我的意思是不需要寫 razor,就是 @ 啊 <% %> 之類的標記。
呃……你說得對,相信自己……實踐出真知……
uj5u.com熱心網友回復:
專案對功能性有需求,就用SPA,也就是前后端完全分離,這樣razor用到的就會少
對內容需求大,還是MVC,回應速度快,利于SEO,
用SPA的現在基本上都是做移動app的,成本低,跨平臺uj5u.com熱心網友回復:
你這么說,我感覺我好菜啊,主要是別人的專案,所以我想著我自己先大致了解點之后,再去問別人,這樣他講起來我至少能夠聽得懂,不然我怕我聽得云里霧里
你的意思是cshtml檔案里面必須要寫c#代碼?我感覺不用啊,我ajax之后得到的資料交給js去更新web頁面不就行了嗎?
但是第一次請求這個網頁的時候,還是得需要服務器端來處理的,接下來就可以全靠ajax了
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
不是這樣理解的。都得服務器來處理,我的意思是不需要寫 razor,就是 @ 啊 <% %> 之類的標記。
呃……你說得對,相信自己……實踐出真知……
uj5u.com熱心網友回復:
你這么說,我感覺我好菜啊,主要是別人的專案,所以我想著我自己先大致了解點之后,再去問別人,這樣他講起來我至少能夠聽得懂,不然我怕我聽得云里霧里
你的意思是cshtml檔案里面必須要寫c#代碼?我感覺不用啊,我ajax之后得到的資料交給js去更新web頁面不就行了嗎?
但是第一次請求這個網頁的時候,還是得需要服務器端來處理的,接下來就可以全靠ajax了
大神,看起來mvc現在也要被淘汰了啊,我居然才剛剛開始接觸。。。難道.net的mvc架構的view里面不能只包含html和js嗎?一定要含有服務器端的代碼?做ajax不就行了嘛
在最新一代的專案里
你view工程可以什么都沒有,只是一堆html和js
你的control工程,可以是nodejs(nodejs好處是輕量,同時本身就是js物件,他不存在前后端物件轉換的問題,壞處嘛就是你的跟js這個最不講道理,最無厘頭的語言打交道了),可以是net core,可以標準的net,他只需支持rest和websocet雙工通訊
你的model工程,這個就見仁見智了,你可以要,可以不要。比如我和sp1234都比較喜歡knockout,因為這個比anglr,vue輕量,同時也有工具將你的model轉換成復合knockout物件的vs插件(當然你也可以自己找生成vue或angrl物件的插件)
這樣的專案架子,誰說他不不具備可行性呢?
可以的,尤其是不需要做 SEO 的網站,可以這樣做。
不是這樣理解的。都得服務器來處理,我的意思是不需要寫 razor,就是 @ 啊 <% %> 之類的標記。
呃……你說得對,相信自己……實踐出真知……
前后端分離是好事,有利于分工,增加可維護性。
但是從邏輯上來說,再怎么分,都是一個系統,需要建立聯系的……至于怎么建立這種聯系,真是個說不盡的話題……
uj5u.com熱心網友回復:
用戶體驗是關鍵uj5u.com熱心網友回復:
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
區別是呼叫邏輯不通,使用cshtml和controller,請求先到controller的action方法然后根據action回傳相應的cshtml檔案。如訪問http://www.baidu.com/Home/Index 是訪問的Homecontroller的Index()然后來生成對應的html。
使用html是直接決議的html地址。如訪問 http://www.baidu.com/index.html。IIS直接給你回傳index.html這個靜態頁面。
他們都是HTML的載體,但是html就是html,而cshtml是一種模板,可以動態改變cshtml的屬性,即使cshtml沒有任何C#代碼,但是還是可以在后臺控制,比如在action中判斷是否登錄,未登錄跳轉到404。而html不具有這種功能。
將Html跟chtml比是不對的,html對應的應該是整個MVC請求最后生成的動態HTML.uj5u.com熱心網友回復:
恩,你這么說,我感覺我理解了,果然還是舉例子更容易讓人理解啊。動態和靜態的區別,我想我是理解了。但是如果html靜態頁面,我應該也可以通過往里面加入js來請求controller層的函式吧,相當于是ajax了,就是加載好html靜態頁面后,再由瀏覽器來主動請求資料并通過js去把資料布置上去,而非像之前說的讓服務器預先生成好資料再結合cshtml來回傳,這樣應該也可以吧?
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
區別是呼叫邏輯不通,使用cshtml和controller,請求先到controller的action方法然后根據action回傳相應的cshtml檔案。如訪問http://www.baidu.com/Home/Index 是訪問的Homecontroller的Index()然后來生成對應的html。
使用html是直接決議的html地址。如訪問 http://www.baidu.com/index.html。IIS直接給你回傳index.html這個靜態頁面。
他們都是HTML的載體,但是html就是html,而cshtml是一種模板,可以動態改變cshtml的屬性,即使cshtml沒有任何C#代碼,但是還是可以在后臺控制,比如在action中判斷是否登錄,未登錄跳轉到404。而html不具有這種功能。
將Html跟chtml比是不對的,html對應的應該是整個MVC請求最后生成的動態HTML.uj5u.com熱心網友回復:
恩,你這么說,我感覺我理解了,果然還是舉例子更容易讓人理解啊。動態和靜態的區別,我想我是理解了。但是如果html靜態頁面,我應該也可以通過往里面加入js來請求controller層的函式吧,相當于是ajax了,就是加載好html靜態頁面后,再由瀏覽器來主動請求資料并通過js去把資料布置上去,而非像之前說的讓服務器預先生成好資料再結合cshtml來回傳,這樣應該也可以吧?
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
區別是呼叫邏輯不通,使用cshtml和controller,請求先到controller的action方法然后根據action回傳相應的cshtml檔案。如訪問http://www.baidu.com/Home/Index 是訪問的Homecontroller的Index()然后來生成對應的html。
使用html是直接決議的html地址。如訪問 http://www.baidu.com/index.html。IIS直接給你回傳index.html這個靜態頁面。
他們都是HTML的載體,但是html就是html,而cshtml是一種模板,可以動態改變cshtml的屬性,即使cshtml沒有任何C#代碼,但是還是可以在后臺控制,比如在action中判斷是否登錄,未登錄跳轉到404。而html不具有這種功能。
將Html跟chtml比是不對的,html對應的應該是整個MVC請求最后生成的動態HTML.
可以的,但是靜態頁面是所有人呢都能訪問的不好做權限管理uj5u.com熱心網友回復:
哦對,但是現在很多人喊著jsp,aspx淘汰了,喊著前后端解耦,難道jsp,aspx解耦做得不夠好,我感覺他倆不都已經把view層和controller層分開了嗎
恩,你這么說,我感覺我理解了,果然還是舉例子更容易讓人理解啊。動態和靜態的區別,我想我是理解了。但是如果html靜態頁面,我應該也可以通過往里面加入js來請求controller層的函式吧,相當于是ajax了,就是加載好html靜態頁面后,再由瀏覽器來主動請求資料并通過js去把資料布置上去,而非像之前說的讓服務器預先生成好資料再結合cshtml來回傳,這樣應該也可以吧?
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
區別是呼叫邏輯不通,使用cshtml和controller,請求先到controller的action方法然后根據action回傳相應的cshtml檔案。如訪問http://www.baidu.com/Home/Index 是訪問的Homecontroller的Index()然后來生成對應的html。
使用html是直接決議的html地址。如訪問 http://www.baidu.com/index.html。IIS直接給你回傳index.html這個靜態頁面。
他們都是HTML的載體,但是html就是html,而cshtml是一種模板,可以動態改變cshtml的屬性,即使cshtml沒有任何C#代碼,但是還是可以在后臺控制,比如在action中判斷是否登錄,未登錄跳轉到404。而html不具有這種功能。
將Html跟chtml比是不對的,html對應的應該是整個MVC請求最后生成的動態HTML.
可以的,但是靜態頁面是所有人呢都能訪問的不好做權限管理uj5u.com熱心網友回復:
哦對,但是現在很多人喊著jsp,aspx淘汰了,喊著前后端解耦,難道jsp,aspx解耦做得不夠好,我感覺他倆不都已經把view層和controller層分開了嗎
恩,你這么說,我感覺我理解了,果然還是舉例子更容易讓人理解啊。動態和靜態的區別,我想我是理解了。但是如果html靜態頁面,我應該也可以通過往里面加入js來請求controller層的函式吧,相當于是ajax了,就是加載好html靜態頁面后,再由瀏覽器來主動請求資料并通過js去把資料布置上去,而非像之前說的讓服務器預先生成好資料再結合cshtml來回傳,這樣應該也可以吧?
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
區別是呼叫邏輯不通,使用cshtml和controller,請求先到controller的action方法然后根據action回傳相應的cshtml檔案。如訪問http://www.baidu.com/Home/Index 是訪問的Homecontroller的Index()然后來生成對應的html。
使用html是直接決議的html地址。如訪問 http://www.baidu.com/index.html。IIS直接給你回傳index.html這個靜態頁面。
他們都是HTML的載體,但是html就是html,而cshtml是一種模板,可以動態改變cshtml的屬性,即使cshtml沒有任何C#代碼,但是還是可以在后臺控制,比如在action中判斷是否登錄,未登錄跳轉到404。而html不具有這種功能。
將Html跟chtml比是不對的,html對應的應該是整個MVC請求最后生成的動態HTML.
可以的,但是靜態頁面是所有人呢都能訪問的不好做權限管理
jsp,aspx淘汰不是因為解耦做的不夠好,是因為他們不能提供更酷炫的效果。像我現在之所以用aspx而少用mvc,是因為我們公司有3個游戲,每個游戲都有一套網站:網站后臺,游戲后臺,運營后臺等。所以一般簡單的功能我都使用WebForm,只有一些需要復雜前端效果的用MVC提供資料,js來展示資料。WebForm無疑更適合我現在的情況:小公司一個人維護大量平臺,我的所有網站都是以WEBForm為基礎,有空的時候加入了流行的bootstrap,MVC,EF,echart等各種各樣的東西。一個人首先要確定自己想要做什么,然后選用相應的技術,比如網站已酷炫為主,就需要以前端框架為主,后臺只負責提供資料。各種框架也不是說會用就好,各種框架其實也只是提供一個API的案例,不能幫助更快的做專案,必須自己去完善這個框架。
比如說我的專案中需要大量的資料查詢,各種分頁,各種篩選。我就自己封裝了一些功能,比如需要一個登陸資料,在后臺我只用定義對應的表,默認排序,資料庫連接,引數,和前臺系結到哪個repeater。就能直接系結資料
public partial class LoginRecord : ListBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Table = "RecordLogon";
orderby = "LogonTime desc";
Bind(rpt, Execute(where.ToString(), Config.DBRecord));
}
public LoginRecord()
{
orderby = "userid desc";
SQLFrag.Add("uid", "and userid=@uid");
SQLFrag.Add("mac", "and logonmac=@mac");
}
}
前臺頁面
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form method="get" action="LoginRecord.aspx">
<label> 用戶ID:<input type="number" name="uid" value="https://bbs.csdn.net/topics/<%=GetCanshu("uid") %>"/></label>
<label> Mac:<input type="text" name="mac" value="https://bbs.csdn.net/topics/<%=GetCanshu("mac") %>"/></label>
<input type="submit" class="btn btn-success" value="https://bbs.csdn.net/topics/搜索" />
</form>
<table>
<tr>
<td>
用戶ID
</td>
<td>
登錄Mac
</td>
<td>
登錄時間
</td>
<td>
離開時間
</td>
<td>
登錄IP
</td>
<td></td>
</tr>
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<td>
<a href="https://bbs.csdn.net/topics/LoginRecord.aspx?uid=<%#Eval("userid") %>"><%#Eval("userid") %></a>
</td>
<td>
<a href="https://bbs.csdn.net/topics/LoginRecord.aspx?mac=<%#Eval("LogonMAC") %>"><%#Eval("LogonMAC") %></a>
</td>
<td>
<%#Eval("LogonTime") %>
</td>
<td>
<%#Eval("LogonOutTime") %>
</td>
<td>
<%#Eval("LogonIP") %>
</td>
<td>
<a onclick="top.OpenWinMin('LoginMacRecord.aspx','Mac匯總')">Mac匯總</a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<%=strPage %>//這是后臺直接生成的分頁代碼
</body>
</html>
最后的效果如下:
如果是其他需求,封裝出的代碼又不一樣uj5u.com熱心網友回復:
受教了,謝謝
哦對,但是現在很多人喊著jsp,aspx淘汰了,喊著前后端解耦,難道jsp,aspx解耦做得不夠好,我感覺他倆不都已經把view層和controller層分開了嗎
恩,你這么說,我感覺我理解了,果然還是舉例子更容易讓人理解啊。動態和靜態的區別,我想我是理解了。但是如果html靜態頁面,我應該也可以通過往里面加入js來請求controller層的函式吧,相當于是ajax了,就是加載好html靜態頁面后,再由瀏覽器來主動請求資料并通過js去把資料布置上去,而非像之前說的讓服務器預先生成好資料再結合cshtml來回傳,這樣應該也可以吧?
這個專案里的cshtml檔案里面全都是html代碼和js代碼,沒有任何c#代碼,那這個cshtml檔案和html檔案還有啥區別
1、是
2、只是你的專案沒有包含,是可以包含的
3、4沒有任何意義,這跟解耦沒關系。
5、你又沒有給別人說你想要HTML格式的,別人肯定不會照顧你的口味
區別是呼叫邏輯不通,使用cshtml和controller,請求先到controller的action方法然后根據action回傳相應的cshtml檔案。如訪問http://www.baidu.com/Home/Index 是訪問的Homecontroller的Index()然后來生成對應的html。
使用html是直接決議的html地址。如訪問 http://www.baidu.com/index.html。IIS直接給你回傳index.html這個靜態頁面。
他們都是HTML的載體,但是html就是html,而cshtml是一種模板,可以動態改變cshtml的屬性,即使cshtml沒有任何C#代碼,但是還是可以在后臺控制,比如在action中判斷是否登錄,未登錄跳轉到404。而html不具有這種功能。
將Html跟chtml比是不對的,html對應的應該是整個MVC請求最后生成的動態HTML.
可以的,但是靜態頁面是所有人呢都能訪問的不好做權限管理
jsp,aspx淘汰不是因為解耦做的不夠好,是因為他們不能提供更酷炫的效果。像我現在之所以用aspx而少用mvc,是因為我們公司有3個游戲,每個游戲都有一套網站:網站后臺,游戲后臺,運營后臺等。所以一般簡單的功能我都使用WebForm,只有一些需要復雜前端效果的用MVC提供資料,js來展示資料。WebForm無疑更適合我現在的情況:小公司一個人維護大量平臺,我的所有網站都是以WEBForm為基礎,有空的時候加入了流行的bootstrap,MVC,EF,echart等各種各樣的東西。一個人首先要確定自己想要做什么,然后選用相應的技術,比如網站已酷炫為主,就需要以前端框架為主,后臺只負責提供資料。各種框架也不是說會用就好,各種框架其實也只是提供一個API的案例,不能幫助更快的做專案,必須自己去完善這個框架。
比如說我的專案中需要大量的資料查詢,各種分頁,各種篩選。我就自己封裝了一些功能,比如需要一個登陸資料,在后臺我只用定義對應的表,默認排序,資料庫連接,引數,和前臺系結到哪個repeater。就能直接系結資料
public partial class LoginRecord : ListBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Table = "RecordLogon";
orderby = "LogonTime desc";
Bind(rpt, Execute(where.ToString(), Config.DBRecord));
}
public LoginRecord()
{
orderby = "userid desc";
SQLFrag.Add("uid", "and userid=@uid");
SQLFrag.Add("mac", "and logonmac=@mac");
}
}
前臺頁面
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form method="get" action="LoginRecord.aspx">
<label> 用戶ID:<input type="number" name="uid" value="https://bbs.csdn.net/topics/<%=GetCanshu("uid") %>"/></label>
<label> Mac:<input type="text" name="mac" value="https://bbs.csdn.net/topics/<%=GetCanshu("mac") %>"/></label>
<input type="submit" class="btn btn-success" value="https://bbs.csdn.net/topics/搜索" />
</form>
<table>
<tr>
<td>
用戶ID
</td>
<td>
登錄Mac
</td>
<td>
登錄時間
</td>
<td>
離開時間
</td>
<td>
登錄IP
</td>
<td></td>
</tr>
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<td>
<a href="https://bbs.csdn.net/topics/LoginRecord.aspx?uid=<%#Eval("userid") %>"><%#Eval("userid") %></a>
</td>
<td>
<a href="https://bbs.csdn.net/topics/LoginRecord.aspx?mac=<%#Eval("LogonMAC") %>"><%#Eval("LogonMAC") %></a>
</td>
<td>
<%#Eval("LogonTime") %>
</td>
<td>
<%#Eval("LogonOutTime") %>
</td>
<td>
<%#Eval("LogonIP") %>
</td>
<td>
<a onclick="top.OpenWinMin('LoginMacRecord.aspx','Mac匯總')">Mac匯總</a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<%=strPage %>//這是后臺直接生成的分頁代碼
</body>
</html>
最后的效果如下:
如果是其他需求,封裝出的代碼又不一樣uj5u.com熱心網友回復:
學習了 感謝各位uj5u.com熱心網友回復:
學而不思則罔,思而不學則殆;迷惘了,肯定是思考的多踐行的少造成的;說實話,你的問題我壓根也沒看明白轉載請註明出處,本文鏈接:https://www.uj5u.com/net/149749.html
標籤:ASP.NET
下一篇:C#呼叫第三方DLL 嘗試讀取或寫入受保護的記憶體、Access violation at address 09303B19. Write of address

