Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 妇女网站爱嘿嘿视频免费观看,中文字幕第一区,国产成人免费在线

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          ASP.NET Razor-C 和 VB 代碼語法

          azor 同時支持 C# (C sharp) 和 VB (Visual Basic)。


          主要的 Razor C# 語法規(guī)則

          • Razor 代碼塊包含在 @{ ... } 中

          • 內(nèi)聯(lián)表達式(變量和函數(shù))以 @ 開頭

          • 代碼語句用分號結(jié)束

          • 變量使用 var 關(guān)鍵字聲明

          • 字符串用引號括起來

          • C# 代碼區(qū)分大小寫

          • C# 文件的擴展名是 .cshtml

          C# 實例

          <!-- Single statement block -->

          @{ var myMessage ="Hello World"; }

          <!-- Inline expression or variable -->

          <p>The value of myMessage is: @myMessage</p>

          <!--Multi-statement block -->

          @{

          var greeting = "Welcome to our site!";

          var weekDay = DateTime.Now.DayOfWeek;

          var greetingMessage = greeting + " Here in Huston it is: " + weekDay;

          }

          <p>The greeting is: @greetingMessage</p>

          運行實例 ?


          主要的 Razor VB 語法規(guī)則

          • Razor 代碼塊包含在 @Code ... End Code 中

          • 內(nèi)聯(lián)表達式(變量和函數(shù))以 @ 開頭

          • 變量使用 Dim 關(guān)鍵字聲明

          • 字符串用引號括起來

          • VB 代碼不區(qū)分大小寫

          • VB 文件的擴展名是 .vbhtml

          實例

          <!-- Single statement block -->

          @Code dim myMessage = "Hello World" End Code

          <!-- Inline expression or variable -->

          <p>The value of myMessage is: @myMessage</p>

          <!-- Multi-statement block -->

          @Code

          dim greeting = "Welcome to our site!"

          dim weekDay = DateTime.Now.DayOfWeek

          dim greetingMessage = greeting & " Here in Huston it is: " & weekDay

          End Code

          <p>The greeting is: @greetingMessage</p>

          運行實例 ?


          它是如何工作的?

          Razor 是一種將服務(wù)器代碼嵌入在網(wǎng)頁中的簡單的編程語法。

          Razor 語法是基于 ASP.NET 框架,專門用于創(chuàng)建 Web 應(yīng)用程序的部分 Microsoft.NET 框架。

          Razor 語法支持所有 ASP.NET 的功能,但是使用的是一種簡化語法,對初學(xué)者而言更容易學(xué)習(xí),對專家而言更有效率的。

          Razor 網(wǎng)頁可以被描述成帶以下兩種類型內(nèi)容的 HTML 網(wǎng)頁: HTML 內(nèi)容和 Razor 代碼。

          當(dāng)服務(wù)器讀取頁面時,它首先運行 Razor 代碼,然后再發(fā)送 HTML 頁面到瀏覽器。在服務(wù)器上執(zhí)行的代碼能夠執(zhí)行一些在瀏覽器上不能完成的任務(wù),比如,訪問服務(wù)器數(shù)據(jù)庫。服務(wù)器代碼能創(chuàng)建動態(tài)的 HTML 內(nèi)容,然后發(fā)送到瀏覽器。從瀏覽器上看,服務(wù)器代碼生成的 HTML 與靜態(tài)的 HTML 內(nèi)容沒有什么不同。

          帶 Razor 語法的 ASP.NET 網(wǎng)頁有特殊的文件擴展名 cshtml(Razor C#)或者 vbhtml(Razor VB)。


          使用對象

          服務(wù)器編碼往往涉及到對象。

          "Date" 對象是一個典型的內(nèi)置的 ASP.NET 對象,但對象也可以是自定義的,一個網(wǎng)頁,一個文本框,一個文件,一個數(shù)據(jù)庫記錄,等等。

          對象有用于執(zhí)行的方法。一個數(shù)據(jù)庫記錄可能有一個 "Save" 方法,一個圖像對象可能有一個 "Rotate" 方法,一個電子郵件對象可能有一個 "Send" 方法,等等。

          對象也有用于描述各自特點的屬性。一個數(shù)據(jù)庫記錄可能有 FirstName 和 LastName 屬性。

          ASP.NET Date 對象有一個 Now 屬性(寫成 Date.Now),Now 屬性有一個 Day 屬性(寫成 Date.Now.Day)。下面實例演示了如何訪問 Data 對象的一些屬性:

          實例

          <table border="1">

          <tr>

          <th width="100px">Name</th>

          <td width="100px">Value</td>

          </tr>

          <tr>

          <td>Day</td><td>@DateTime.Now.Day</td>

          </tr>

          <tr>

          <td>Hour</td><td>@DateTime.Now.Hour</td>

          </tr>

          <tr>

          <td>Minute</td><td>@DateTime.Now.Minute</td>

          </tr>

          <tr>

          <td>Second</td><td>@DateTime.Now.Second</td>

          </tr>

          </td>

          </table>

          運行實例 ?


          If 和 Else條件

          動態(tài)網(wǎng)頁的一個重要特點是,您可以根據(jù)條件決定做什么。

          做到這一點的常用方法是使用 if ... else 語句:

          實例

          @{

          var txt = "";

          if(DateTime.Now.Hour > 12)

          {txt = "Good Evening";}

          else

          {txt = "Good Morning";}

          }

          <html>

          <body>

          <p>The message is @txt</p>

          </body>

          </html>

          日常工作中(主要使用ASP.net),我需要編寫很多JavaScript代碼。我做的最重復(fù)的任務(wù)之一是jQuery Ajax調(diào)用。你看:

          $.ajax({
              type: "POST",
              url: "MyPage.aspx/MyWebMethod",
              data: "{parameter:value,parameter:value}",
              contentType: "application/json; charset=utf-8",
              dataType: "json",
              success: function(msg) {
                  //function called successfull
              },
              error: function(msg) {
                  //some error happened
              }
          });
          


          我不知道對您來說是否相同,但是對我來說用這種語法編寫調(diào)用太麻煩了。而且,以前必須按照已知規(guī)則使用參數(shù)構(gòu)建字符串以傳遞給WebMethod:字符串必須用引號傳遞,數(shù)字不能傳遞,等等。
          因此,我決定創(chuàng)建一個小而有用的JavaScript類來幫助我有了這個特定的問題,現(xiàn)在我已經(jīng)完成了jQuery Ajax調(diào)用,這對我來說非常友好。
          在類構(gòu)造函數(shù)中,我傳遞頁面名稱,方法名稱以及成功和錯誤函數(shù)。以后,我會根據(jù)需要對addParam方法進行盡可能多的調(diào)用。最后,我調(diào)用run方法進行Ajax調(diào)用。成功函數(shù)和錯誤函數(shù)必須分別編寫。
          參數(shù)根據(jù)其類型進行處理。如果參數(shù)是字符串,則使用引號。如果是數(shù)字,我不會。日期參數(shù)是一種特殊情況。在這種情況下,我使用JavaScript日期對象的getTime()函數(shù),該函數(shù)給了我自1970年1月1日以來的日期的毫秒數(shù)。后來,我將該值轉(zhuǎn)換為UTC時間,這樣我得到了一個最終的毫秒數(shù),即我可以將Int64值傳遞給我的VB.net(或C#)代碼,用它來重建.Net中的日期值。
          這是我的jAjax類的完整列表(末尾帶有日期幫助器功能):

          function jAjax(pageName, methodName, successFunc, errorFunc) {
              //stores the page name
              this.pageName = pageName;
              //stores the method name
              this.methodName = methodName;
              //stores the success function
              this.successFunc = successFunc;
              //stores the error function
              this.errorFunc = errorFunc;
              //initializes the parameter names array
              this.paramNames = new Array();
              //initializes the parameter values array
              this.paramValues = new Array();
          
              //method for add a new parameter (simply pushes to the names and values arrays)
              this.addParam = function(name, value) {
                  this.paramNames.push(name);
                  this.paramValues.push(value);
              }
          
              //method to run the jQuery ajax request
              this.run = function() {
              //initializes the parameter data string
                  var dataStr = '{';
                  //iterate thru the parameters arrays to compose the parameter data string
                  for (var k = 0; k < this.paramNames.length; k++) {
                      //append the parameter name
                      dataStr += this.paramNames[k] + ':';
                      if (typeof this.paramValues[k] == 'string') {
                          //string parameter, append between quotes
                          dataStr += '"' + this.paramValues[k] + '",';
                      } else if (typeof this.paramValues[k] == 'number') {
                          //number parameter, append "as-is" calling toString()
                          dataStr += this.paramValues[k].toString() + ',';
                      } else if (typeof this.paramValues[k] == 'object') {
                          if (this.paramValues[k].getTime != undefined) {
                              //date value
                              //call to my getUtcTime function to get the number of
                              //milliseconds (since january 1, 1970) in UTC format
                              //and append as a number
                              dataStr += getUtcTime(this.paramValues[k]).toString() + ',';
                          } else {
                              //object value
                              //because I don't know what's this, append the toString()
                              //output
                              dataStr += '"' + this.paramValues[k].toString() + '",';
                          }
                      }
                  }
                  //if some parameter added, remove the trailing ","
                  if (dataStr.length > 1) dataStr = dataStr.substr(0, dataStr.length - 1);
                  //close the parameter data string
                  dataStr += '}';
          
                  //do the jQuery ajax call, using the parameter data string
                  //and the success and error functions
                  $.ajax({
                      type: "POST",
                      url: this.pageName + "/" + this.methodName,
                      data: dataStr,
                      contentType: "application/json; charset=utf-8",
                      dataType: "json",
                      success: function(msg) {
                          successFunc(msg);
                      },
                      error: function(msg) {
                          errorFunc(msg);
                      }
                  });
              }
          }
          
          function getUtcTime(dateValue) {
              //get the number of milliseconds since january 1, 1970
              var time = dateValue.getTime();
              //get the UTC time offset in minutes. if you created your date with
              //new Date(), maybe this contains a value. but if you compose the date
              //by yourself (i.e. var myDate = new Date(1984,5,21,12,53,11)) this will
              //be zero
              var minutes = dateValue.getTimezoneOffset() * -1;
              //get the milliseconds value
              var ms = minutes * 60000;
              //add to the original milliseconds value so we get the GMT exact value
              return time + ms;
          }
          



          這是使用的語法:

          var ajaxCall = new jAjax('MyPage.aspx','MyWebMethod',successFunc,errorFunc);
          ajaxCall.addParam('s','this is a string');
          ajaxCall.addParam('n',34);
          ajaxCall.addParam('d',new Date());
          ajaxCall.run();
          
          function successFunc(msg) {
              ...
          }
          
          function errorFunc(msg) {
          }
          



          另外一個好處是,您可以將成功和錯誤功能重新用于幾個ajax調(diào)用。
          希望對您有幫助!!隨時在您的應(yīng)用程序中使用jAjax類。

          、前言

          繼微軟拋棄IE瀏覽器全面擁抱Chromium內(nèi)核推出Edge瀏覽器后,一直在關(guān)注那老舊的webbrowser未來如何發(fā)展。雖然編程語言千千萬,也有人不看好winform編程,但在當(dāng)前windows依舊占據(jù)相當(dāng)?shù)氖袌龇蓊~。在webbrowser中官方支持的是IE內(nèi)核,而IE內(nèi)核又跟你的電腦的安裝版本有關(guān)系,再加上IE對各種html前端支持的不友好。vuejs都已經(jīng)徹底拋棄了IE瀏覽器,遲遲不敢在生產(chǎn)環(huán)境大量應(yīng)用vueweb應(yīng)用。(有人可能會說可以換webkit或者cesharp內(nèi)核,筆者也嘗試過,但畢竟不是微軟的親生,各種不友好,各種復(fù)雜,webkit都多久沒更新了,根據(jù)歷史經(jīng)驗過于復(fù)雜的東西一般很難長久)。
          之前關(guān)注過webview2,但那段時間剛出支持也不是很友好,無法很有效繼承,有說要安裝edge瀏覽器的,又說要安裝別的,而win7可能又不支持等等,而恰好我們的場景用又存在大量的win7,只能暫時放棄。
          最近要應(yīng)用Vue,重新關(guān)注了一下相關(guān)應(yīng)用,很驚喜的發(fā)現(xiàn),webview2有了官方比較好的支持(可能早就有了,但是肯定不會超過1年)微軟官方文檔鏈接WebView2 - Microsoft Edge Developer

          如果本文有不對的地方還要以官方文檔為準(zhǔn),研究不深。先說體驗效果,webview2真的很好,內(nèi)核徹底替換為chromium,Vue項目跑起來了也不用擔(dān)心各種不兼容了,終于不用為webbrowser擔(dān)憂了。由于項目使用的VB.NET(不要問為甚么不是C#,我會一點,但是用不到),因此考慮到系統(tǒng)中的使用還是集成到了VB.NET中,在搜索過程中發(fā)現(xiàn)webview2的資料不多,一些屬性還沒有很好的案例,可能與winform的沒落有關(guān)系吧,而且相關(guān)介紹均是C#的,也包括官方文檔。因此在基本集成以后,通過這篇文章做簡單分享與記錄。這里的集成比較簡單,主要是滿足WEB和客戶端的混合編程,也是webview2介紹中的重要應(yīng)用之一,畢竟WEB才是管理系統(tǒng)的未來。

          二、Webview2 簡單介紹

          Webview2 加了個2可能是為了跟安卓的webview區(qū)分吧,畢竟一搜webview出來的全是安卓的。

          Webview2支持win7、win8、win10以及對應(yīng)的server版本,可以說是涵蓋了windows的江山,具體的版本說明可以參考官方文檔。如果你說還有xp,天就被聊死了,我們不是一路人。

          從搜到的帖子看大家對于webview2還是持肯定態(tài)度的,比webkit,cefsharp的兼容性要好的多,從我的體驗來講它可以完全替代webbrowser控件,正在生產(chǎn)環(huán)境中替代原有webbrowser控件。

          三、環(huán)境配置

          Webview2雖然沒有了IE一堆亂糟糟的版本問題,但是Webview2畢竟是依賴與Edge誕生的產(chǎn)品,它依然需要一定的環(huán)境,微軟提供了2種方案。

          • Webview2 runtime 運行時環(huán)境,分為x86,x64,arm版本,按照對應(yīng)版本下載即可,通過實測在64位安裝x86版本也可以使用,但還是建議按照對應(yīng)版本安裝。在前面給到的微軟官方鏈接可以安裝
          • Microsoft Edge 預(yù)覽體驗成員(預(yù)覽版) 注意不是我們附帶的發(fā)布版的edge,是單獨的預(yù)覽版,有3款可以選擇,官方建議candy版天天更新。

          這里選擇的是Webview2 runtime畢竟我們是集成環(huán)境,這里可以根據(jù)需要選擇。

          • 開發(fā)工具要求VS2017以上,案例使用的vs2017
          • .net版本 有說要4.6.2以上的,官方文檔選的4.7.2。案例實測4.5.2中可用。

          四、進入正題

          官方文檔是C#的比較簡單,C#er們自行閱覽即可,畢竟在大神面前我只是個渣渣。

          1、引入Webview2

          • "解決方案資源管理器"中,右擊項目名稱,然后選擇"管理 NuGet 包
          • 在搜索欄中,鍵入并單擊"Microsoft.Web.WebView2"。WebView2

          • 工具箱中就有了webview2控件了,拖拽即可,不過多解釋

          2、關(guān)鍵方法、事件

          • 導(dǎo)航方法(鏈接跳轉(zhuǎn))
          WebView21.CoreWebView2.Navigate(im_ipurl)
          • 自動檢測安裝Webview2 runtime(放在WebView21_CoreWebView2InitializationCompleted事件中)
              Function installruntime()
                  Try
                      Dim v As String = WebView21.Source.ToString
                      Me.Text = ("Copyright ? 2021-2022 lxfamn, All Rights Reserved " )
                  Catch ex As Exception
                      If Environment.Is64BitOperatingSystem Then
                          MsgBox("系統(tǒng)全面升級瀏覽器內(nèi)核,接下來系統(tǒng)將自動為您安裝補丁,請在彈出窗口選運行,64位系統(tǒng)")
                          Process.Start("\\運行組件共享路徑\webruntime\X64.exe")
                      Else
                          MsgBox("系統(tǒng)全面升級瀏覽器內(nèi)核,接下來系統(tǒng)將自動為您安裝補丁,請在彈出窗口選運行,32位系統(tǒng)")
                          Process.Start("\\運行組件共享路徑\webruntime\X64.exe")
                      End If
          
                  End Try
              End Function
             Private Sub WebView21_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles WebView21.CoreWebView2InitializationCompleted
                  installruntime()
                  WebView21.CoreWebView2.Navigate(im_ipurl & "/home")
          
              End Sub
          • NavigationCompleted 相當(dāng)于webbrowser documnentcomplete事件

          事件執(zhí)行流程如下圖所示:

          3、最關(guān)鍵、復(fù)雜的流程

          webview與主機程序的交互過程,在原有的webbrowser中在WebBrowser1_DocumentCompleted事件中通過對WebBrowser1.DocumentText的解析可以做進行不同的處理。

          • CoreWebView2 是webview2下的一個核心方法,感覺像是內(nèi)核中的一些方法

          在webview2中沒有了上述事件和方法,取而代之的是postMessage,官方案例使用的C#,使用了aysn異步綁定等方式。

          簡單可以理解為,提供了WebView21.CoreWebView2.ExecuteScriptAsyncWebView21.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync方法,向站點注入javasript程序來實現(xiàn)相關(guān)功能,這里我只使用了ExecuteScriptAsync方法,在NavigationCompleted事件,在頁面加載完成后向主機發(fā)送消息,WebView21_WebMessageReceived 事件中接受發(fā)送的消息。

            Private Sub WebView21_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles WebView21.NavigationCompleted
                  TextBox1.Text = WebView21.Source.ToString()'導(dǎo)航完成后,在標(biāo)題欄中顯示當(dāng)前網(wǎng)址
                  If (TextBox1.Text.Contains("www.microsoft.com")) Then
                      WebView21.CoreWebView2.Navigate("https://blog.lxfamn.cn/?cat=101")
                  End If
                  WebView21.CoreWebView2.ExecuteScriptAsync("window.chrome.webview.postMessage(document.body.innerHTML);")
              End Sub
              Private Sub WebView21_WebMessageReceived(sender As Object, e As CoreWebView2WebMessageReceivedEventArgs) Handles WebView21.WebMessageReceived
                  webdeal(e.WebMessageAsJson.ToString)'根據(jù)接收的消息進行邏輯處理
              End Sub

          4、其他的一些

          建議結(jié)合官方文檔進行閱覽,理解一些方法和規(guī)則,一些方法和過程在官方文檔中解釋還是比較清楚的,本文主要是幫助解釋一些在vb.net以及一些邏輯等問題的解釋。

          附上一些處理url自動補充前綴的方法

           Function geturl(dealway As String)
                  Try
                      Dim urlstr As String = TextBox1.Text
                      If Not urlstr.Contains("http") Then
                          Dim re As New Regex("((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}")
                          Dim Contents As MatchCollection = re.Matches(urlstr)
                          Dim rea As New Regex("[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?")
                          Dim Contentsa As MatchCollection = rea.Matches(urlstr)
                          If Contentsa.Count > 0 Or Contents.Count > 0 Then
          
                              urlstr = "http://" & urlstr
                          Else
                              If dealway = "百度" Then
                                  urlstr = "https://www.baidu.com/s?wd=" & urlstr
                              End If
                              If dealway = "blog" Then
                                  urlstr = "https://blog.lxfamn.cn/?cat=101"
          
                              End If
                          
                          End If
                      End If
                      WebView21.CoreWebView2.Navigate((urlstr))
                  Catch
                      installruntime()
                  End Try
              End Function

          界面布局

          有問題之處歡迎指正

          個人博客:VB.NET Edge webview2 引入-IT涉獵者

          未經(jīng)允許不得轉(zhuǎn)載:https://blog.lxfamn.cn/?p=6698


          主站蜘蛛池模板: 制服丝袜一区二区三区| 亚洲片一区二区三区| 国产成人综合精品一区| 亚洲一区在线观看视频| 插我一区二区在线观看| 国产在线第一区二区三区| 亚洲一区二区三区国产精品无码| 国产午夜一区二区在线观看| 亚洲制服丝袜一区二区三区| 日韩精品一区二区三区大桥未久 | 91视频国产一区| 国产av成人一区二区三区| 日韩经典精品无码一区| 国内精品一区二区三区在线观看| 久久伊人精品一区二区三区 | 欧美日韩国产免费一区二区三区| 亚洲AV无码一区东京热| 亚洲乱码国产一区三区| 韩日午夜在线资源一区二区 | 一区二区视频免费观看| 日本视频一区二区三区| 亚洲国产欧美日韩精品一区二区三区 | 国产精品福利一区二区久久| 无码人妻一区二区三区在线 | 亚洲一区免费观看| 无码人妻久久一区二区三区免费| 一本大道东京热无码一区| 精品久久一区二区| 人妻夜夜爽天天爽爽一区| 呦系列视频一区二区三区| 亚洲综合一区国产精品| 无码日韩AV一区二区三区| 国产福利一区视频| 国产精品一区二区久久精品无码| 久久影院亚洲一区| 亚洲色无码一区二区三区| 中文字幕亚洲综合精品一区| 白丝爆浆18禁一区二区三区| 波多野结衣一区二区三区aV高清| 久久国产免费一区| 亚洲AV无码一区二区三区牲色|