整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          一個純.Net開發的JavaScript執行引擎

          一個純.Net開發的JavaScript執行引擎

          是編程樂趣,一個10年.Net開發經驗老程序員,點擊右上方“關注”,每天為你分享開源項目和編程知識。

          推薦一個.Net開源庫,用來解析和執行JavaScript代碼。

          01

          項目簡介

          Jurassic是一個開源的托管JavaScript執行引擎,使用MS-PL授權協議。它的目標是成為.NET平臺上功能最強,最為標準的JavaScript引擎。

          02

          項目特點

          1、功能強大:支持ECMAScript 3和ECMAScript 5的功能,具備簡單但強大的API,將JavaScript編譯為.NET字節碼(CIL),而非解釋執行。這些功能使得Jurassic能夠滿足各種不同的編程需求;

          2、適用場景多:可以作為.Net應用程序的一部分,適用于多種場景,比如:桌面應用、Web應用、游戲開發;

          3、純.Net開發:純.Net開發,不依賴任何第三方庫,可以完全集成到.Net框架中,可以在任何支持.Net平臺執行;

          4、高性能:使用輕量級代碼生成技術,所有的動態代碼均可被回收,使得具有高效的內存管理和高性能的運行速度;

          5、集成Visual Studio調試功能:支持Visual Studio的調試功能,方便開發人員進行開發與調試。

          03

          使用示例

          1、示例1:簡單執行JavaScript代碼

          var engine=new Jurassic.ScriptEngine();
          //輸出11
          Console.WriteLine(engine.Evaluate("var a=5; var b=6; a + b;"));
          
          
          engine.Evaluate("function add(a,b){return a+b;}");
          var result=engine.CallGlobalFunction<int>("add", 5, 6); 
          //輸入11
          Console.WriteLine(result);

          2、示例2:C#中調用JavaScript函數

          var engine=new Jurassic.ScriptEngine();
          engine.SetGlobalFunction("test", new Func<int, int, int>((a, b)=> a + b));
          var result=engine.Evaluate<int>("test(5, 6)");
          //輸出11
          Console.WriteLine(result);

          3、示例3:加載JavaScript文件

          var engine=new Jurassic.ScriptEngine();
          engine.ExecuteFile(@"utils.js");
          var result=engine.CallGlobalFunction<int>("add", 5, 6);
          //輸出11
          Console.WriteLine(result);

          utils.js代碼

          function add(a, b) {
              return a + b;
          }

          04

          項目地址

          https://github.com/paulbartrum/jurassic

          我是編程樂趣,一個10年.Net開發經驗老程序員,專注開源項目和編程知識分享。

          私信回復:【888】,領取.Net視頻教程。

          - End -

          推薦閱讀

          推薦一個.Ner Core開發的配置中心開源項目

          一個C#開發的Windows遠程桌面工具

          一個基于.Net Core開發的適合外貿商城系統

          基于 .NET Core MVC 的權限管理系統

          基于Asp.Net Mvc開發的個人博客系統




          項目簡介




          基于EF Core之Code First模式的NetCore快速開發框架。本腳手架支持代碼自動生成,以快速開發.Net Core應用程序,實現前后端分離,支持開發多租戶系統。極簡至上,拒絕厚重。NET8版本努力讓您有飛一般的體驗!!!

          !!!強烈建議通過CodeGen代碼生成器初始化項目!!!




          軟件架構




          • Asp.net core 8.0+EF Core 8.0(Code First模式)

          • Newtonsoft.Json序列化

          • AutoMapper 映射

          • JWT+IdentityModel權限控制

          • Autofac依賴注入

          • Swagger+Swashbuckle.AspNetCore.ReDoc API文檔

          • StackExchange.Redis/csredis

          • Quartz定時器

          • DotNetCore.NPOI:word/excel支持

          • NLog日志系統

          • hyjiacan.py4n 漢子轉拼音

          • SkiaSharp 跨平臺的2D 圖像處理API操作

          • SkiaSharp.QrCode 二維碼生成器,真正跨平臺方案

          • Mustachio模板引擎代碼生成器

          • Zack.EFCore.Batch?高性能批量操作庫

          • System.Linq.Dynamic.Core?Linq動態查詢庫

          • 其他:ChakraCore.NET JavaScript引擎




          開發環境




          • VS2022

          • Net 8.0

          • Redis-5.0.14

          • SQL Server

          • MySQL 8.0以上

          • Sqlite

          • PostgreSQL




          代碼目錄結構



          • Model:模型層

          • DAL:數據訪問層

          • BLL:業務邏輯層

          • Web:控制器層

          • ImCore:基于Redis的即時聊天websocket核心




          使用教程



          初始項目

          • 新建項目文件夾,文件夾名字就是項目的名字。如:D:\project\CMS,其中CMS就是項目的名字。

          • 將解壓后的CodeGen.exe文件復制到CMS文件夾,并運行CodeGen.exe文件

          1、生成NetCoreFast Api接口項目

          第1步、輸入"1",選擇“NetCoreFast Api接口項目生成”

          第2步、輸入"1",選擇“初始項目”。此過程會從碼云下載NetCoreFast原始項目,并將項目名(解決方案名)改為項目文件夾的名字CMSApi.項目初始成功!

          第3步、用vs打開CMSApi項目,并在Model層添加實體類,然后vs“重新生成”項目(注:添加了實體類一定要重新生成項目)
          第4步、輸入"2",選擇“生成代碼”,會自動生成bll、controller類
          第5步、輸入"3",選擇“刪除生成的代碼”,會刪除生成的bll、controller類【可選】
          第6步、輸入"4",選擇“升級項目”,會自動從碼云下載NetCoreFast最新代碼更新項目,因而建議不要更改NetCoreFast框架代碼,便于升級【可選】

          2、生成Elementplus-admin-codegen后臺前端管理界面項目

          第1步、輸入"2",選擇“Elementplus-admin-codegen后臺前端管理界面項目生成”
          第2步、輸入"1",選擇“初始項目”。此過程會從碼云下載elementplus-admin-codegen原始項目,并將項目名改為項目文件夾的名字CMSUI.項目初始成功!
          第3步、輸入"4",選擇“升級項目”,會自動從碼云下載elementplus-admin-codegen最新代碼更新項目,因而建議不要更改elementplus-admin-codegen代碼,便于升級【可選】




          快速開發




          1、修改數據庫連接字符串。

          appsettings.Development.json(調試環境配置文件)

          appsettings.Production.json(生產環境)配置文件庫

          SqlServer數據庫

           "ConnectionStrings": {

          本文中,讓我們嘗試構建自定義 HTML Hepler以在 .NET Core MVC 應用程序中提供分頁。首先對不熟悉的人簡單介紹一下,什么是HTML Helper(助手):

          • HTML 助手使開發人員可以輕松快速地創建 HTML 頁面。
          • 在大多數情況下,HTML 助手只是一個返回字符串的方法。
          • MVC 帶有內置的 HTML 幫助器,例如 @Html.TextBox()、@Html.CheckBox()、@Html.Label 等。
          • HTML 助手在 razor 視圖中呈現 html 控件。例如,@Html.TextBox() 渲染 <input type="textbox"> 控件,@Html.CheckBox() 渲染 <input type="checkbox"> 控件等。

          需求

          在Web應用程序中,如果要顯示大量記錄,則需要提供分頁。在本文中,我們通過創建自定義 HTML Helper 在 .NET Core MVC 應用程序中實現分頁。為了簡單起見,我們只能使用數字來表示數據。

          假設我們需要在多頁中顯示 55 條記錄,每頁有 10 個項目,如上所示。

          開始

          打開 Visual Studio 2019 > 創建 .NET Core MVC 應用程序,如下所示。

          項目命名為 HTMLHelpersApp。

          選擇 .NET 框架版本。

          創建所需的模型和幫助文件。

          1. 創建一個新模型“Number”。
          2. 右鍵單擊 Model 文件夾并添加“Number”類。

          在 Number.cs 中添加代碼。該模型捕獲用戶輸入。它只有一個屬性:“InputNumber”。

          using System;
          using System.ComponentModel.DataAnnotations;
          
          
          namespace HTMLHelpersApp.Models
          {
              public class Number
              {
                  //validation for required, only numbers, allowed range-1 to 500
                  [Required(ErrorMessage="Value is Required!. Please enter value between 1 and 500.")]
                  [RegularExpression(@"^\d+$", ErrorMessage="Only numbers are allowed. Please enter value between 1 and 500.")]
                  [Range(1, 500, ErrorMessage="Please enter value between 1 and 500.")]
                  public int InputNumber=1;
              }
          }

          現在讓我們添加一個公共類 PageInfo.cs。創建新文件夾 Common 并添加 PageInfo.cs 類。

          1. 右鍵單擊項目文件夾并添加一個新文件夾。

          在 PageInfo.cs 中添加代碼:

          1. Page Start 表示當前頁面上的第一項。
          2. Page End 表示當前頁面的最后一項。
          3. 每頁項目數表示要在頁面上顯示的項目數。
          4. Last Page 表示頁數/最后頁碼。
          5. Total Items 表示項目的總數。

          根據總項目數和每頁項目數,計算頁面的總頁數、第一個項目和最后一個項目。

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Threading.Tasks;
          
          
          namespace HTMLHelpersApp.Common
          {
              public class PageInfo
              {
                  public int TotalItems { get; set; }
                  public int ItemsPerPage { get; set; }
                  public int CurrentPage { get; set; }
          
          
                  public PageInfo()
                  {
                      CurrentPage=1;
                  }
                  //starting item number in the page
                  public int PageStart
                  {
                      get { return ((CurrentPage - 1) * ItemsPerPage + 1); }
                  }
                  //last item number in the page
                  public int PageEnd
                  {
                      get
                      {
                          int currentTotal=(CurrentPage - 1) * ItemsPerPage + ItemsPerPage;
                          return (currentTotal < TotalItems ? currentTotal : TotalItems);
                      }
                  }
                  public int LastPage
                  {
                      get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
                  }
                  
              }
          }

          現在我們來到最重要的部分:創建自定義 HTML 助手。

          1. 創建自定義 HTML 幫助程序 PageLinks,它呈現頁碼、上一個和下一個鏈接。
          2. 在“Common”文件夾中添加一個新類“PagingHtmlHelpers.cs”。
          3. 在“PagingHtmlHelpers.cs”中添加代碼。
          4. 擴展 HtmlHelper 并添加新功能以添加頁面鏈接。
          public static IHtmlContent PageLinks(this IHtmlHelper htmlHelper, PageInfo pageInfo, Func<int, string> PageUrl)

          5.取2個參數

          1. pageInfo:添加頁碼
          2. 委托給函數:將整數和字符串作為參數添加控制器操作方法中所需的參數

          使用標簽構建器創建錨標簽。

          TagBuilder tag=new TagBuilder("a");
          Add attributes
          tag.MergeAttribute("href", hrefValue);
          tag.InnerHtml.Append(" "+ innerHtml + " ");

          樣式也可以用作屬性。

          using Microsoft.AspNetCore.Html;
          using Microsoft.AspNetCore.Mvc.Rendering;
          using System;
          using System.Text;
          
          
          namespace HTMLHelpersApp.Common
          {
              public static class PagingHtmlHelpers
              {
                  public static IHtmlContent PageLinks(this IHtmlHelper htmlHelper, PageInfo pageInfo, Func<int, string> PageUrl)
                  {
                      StringBuilder pagingTags=new StringBuilder();
                      //Prev Page
                      if (pageInfo.CurrentPage > 1)
                      {
                          pagingTags.Append(GetTagString("Prev", PageUrl(pageInfo.CurrentPage - 1)));
          
          
                      }
                      //Page Numbers
                      for (int i=1; i <=pageInfo.LastPage; i++)
                      {
                          pagingTags.Append(GetTagString(i.ToString(), PageUrl(i)));
                      }
                      //Next Page
                      if (pageInfo.CurrentPage < pageInfo.LastPage)
                      {
                          pagingTags.Append(GetTagString("Next", PageUrl(pageInfo.CurrentPage + 1)));
                      }
                      //paging tags
                      return new HtmlString(pagingTags.ToString());
                  }
          
          
                  private static string GetTagString(string innerHtml, string hrefValue)
                  {
                      TagBuilder tag=new TagBuilder("a"); // Construct an <a> tag
                      tag.MergeAttribute("class","anchorstyle");
                      tag.MergeAttribute("href", hrefValue);
                      tag.InnerHtml.Append(" "+ innerHtml + "  ");
                      using (var sw=new System.IO.StringWriter())
                      {
                          tag.WriteTo(sw, System.Text.Encodings.Web.HtmlEncoder.Default);
                          return sw.ToString();            
                      }
                  }
              }
          }

          在“Models”文件夾中添加一個新類“ShowPaging.cs”。

          • DisplayResult將在每一頁上顯示數字列表。
          • PageInfo將捕獲所有頁面詳細信息,例如每頁上的頁數、總項目、開始項目和最后一個項目等。
          using HTMLHelpersApp.Common;
          using System;
          using System.Collections.Generic;
          using System.ComponentModel.DataAnnotations;
          
          
          namespace HTMLHelpersApp.Models
          {
              public class ShowPaging
              {
                  
                  //validation for required, only numbers, allowed range-1 to 500
                  [Required(ErrorMessage="Value is Required!. Please enter value between 1 and 500.")]
                  [RegularExpression(@"^\d+$", ErrorMessage="Only positive numbers are allowed. Please enter value between 1 and 500.")]
                  [Range(1, 500, ErrorMessage="Please enter value between 1 and 500.")]
                  public int InputNumber { get; set; }
          
          
                  public List<string> DisplayResult { get; set; }
          
          
                  public PageInfo PageInfo;
              }
          }
          
          

          添加新控制器

          添加一個新控制器:“HTMLHelperController”

          右鍵單擊控制器文件夾并在上下文菜單中選擇控制器。

          選擇“MVCController-Empty”。

          在“HTMLHelperController”中添加代碼。

          using HTMLHelpersApp.Common;
          using HTMLHelpersApp.Models;
          using Microsoft.AspNetCore.Mvc;
          using System.Collections.Generic;
          
          
          namespace HTMLHelpersApp.Controllers
          {
              public class HTMLHelperController : Controller
              {
                  private const int PAGE_SIZE=10;
                  public IActionResult Number()
                  {
                      return View();
                  }
          
          
                  public IActionResult ShowPaging(ShowPaging model, int page=1, int inputNumber=1)
                  {
                      if (ModelState.IsValid)
                      {
                          var displayResult=new List<string>();
                          string message;
          
          
                          //set model.pageinfo
                          model.PageInfo=new PageInfo();
                          model.PageInfo.CurrentPage=page;
                          model.PageInfo.ItemsPerPage=PAGE_SIZE;
                          model.PageInfo.TotalItems=inputNumber;
          
          
                          //Set model.displayresult - numbers list
                          for (int count=model.PageInfo.PageStart; count <=model.PageInfo.PageEnd; count++)
                          {
                              message=count.ToString();
                              displayResult.Add(message.Trim());
                          }
                          model.DisplayResult=displayResult;
                      }
                      //return view model
                      return View(model);
                  }
              }
          }

          在 Views 文件夾中創建一個新文件夾“HTMLHelper”,并創建一個新視圖“Number.cshtml”。

          在“Number.cshtml”中添加代碼。

          @model HTMLHelpersApp.Models.Number
          
          
          <h4>Number</h4>
          <hr />
          <div class="row">
              <div class="col-md-4">
                  <form asp-action="ShowPaging" method="get">
                      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                      <div class="form-group">
                          <input asp-for="InputNumber" class="form-control"/>
                      </div>
                      <div class="form-group">
                          <input type="submit" value="Submit" class="btn btn-primary" />
                      </div>
                  </form>
              </div>
          </div>

          同樣,創建一個新視圖“ShowPaging.cshtml”。

          @model HTMLHelpersApp.Models.ShowPaging
          @using HTMLHelpersApp.Common
          
          
          <link rel="stylesheet" href="~/css/anchorstyles.css"/>
          <form>
              <h4>Show Paging</h4>
              <hr />
              <div asp-validation-summary="All" class="text-danger"></div>
              <dl class="row">
                  <dt class="col-sm-2">
                      <b>Number: </b> @Html.DisplayFor(model=> model.InputNumber)
                  </dt>
                  <dd>
                      <a asp-action="Number">Change Number</a>
                  </dd>
              </dl>
          
          
              <div>
                  @if (Model !=null && Model.DisplayResult !=null)
                  {
                      <ul>
                          @foreach (var item in Model.DisplayResult)
                          {
                              <li>@Html.Raw(item)</li>
                          }
                      </ul>
                      <div>
                          @Html.PageLinks(@Model.PageInfo, x=> Url.Action("ShowPaging",
                              new { page=x.ToString(), inputNumber=@Model.InputNumber }))
                      </div>
                  }
              </div>        
           </form>

          解決方案資源管理器如下所示:

          在“startup.cs”中配置默認控制器和操作。

          編譯并運行應用程序,輸入數字 35。

          點擊提交。

          你會在底部看到分頁,每頁顯示10個數字,一共4頁,且每頁都一個鏈接。


          主站蜘蛛池模板: 国产一区二区视频在线观看| 亚洲一区二区影视| 欧洲精品无码一区二区三区在线播放 | 国产福利酱国产一区二区| 波多野结衣电影区一区二区三区| 国产午夜精品一区二区三区 | 亚洲熟妇AV一区二区三区浪潮| 国产成人av一区二区三区在线 | 亚洲视频一区二区三区四区| 国产激情一区二区三区 | 亚洲av无码片区一区二区三区 | 相泽南亚洲一区二区在线播放| 国产精品毛片一区二区三区| 美女免费视频一区二区| 蜜桃AV抽搐高潮一区二区| 日韩精品视频一区二区三区| 国产在线一区二区在线视频 | 成人区精品一区二区不卡亚洲| 亚洲乱码日产一区三区| 亚洲一区二区三区乱码A| 老鸭窝毛片一区二区三区| 国产高清一区二区三区视频| 中文字幕在线不卡一区二区| 亚洲综合一区二区国产精品| 中文乱码精品一区二区三区| 日韩A无码AV一区二区三区| 亚洲av无码一区二区三区天堂| 日本免费一区二区在线观看| 亚洲视频一区二区在线观看| 视频一区精品自拍| 视频一区视频二区制服丝袜| 亚洲av无码成人影院一区| 久久4k岛国高清一区二区| 中文字幕一区二区三区人妻少妇 | 丝袜人妻一区二区三区网站 | 国产av一区二区精品久久凹凸 | 无码少妇一区二区性色AV| 精品亚洲福利一区二区| 精品一区二区三区四区| 免费一区二区三区在线视频| 国产福利日本一区二区三区|