是編程樂趣,一個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步、輸入"1",選擇“NetCoreFast Api接口項目生成”
第2步、輸入"1",選擇“初始項目”。此過程會從碼云下載NetCoreFast原始項目,并將項目名(解決方案名)改為項目文件夾的名字CMSApi.項目初始成功!
第3步、用vs打開CMSApi項目,并在Model層添加實體類,然后vs“重新生成”項目(注:添加了實體類一定要重新生成項目)
第4步、輸入"2",選擇“生成代碼”,會自動生成bll、controller類
第5步、輸入"3",選擇“刪除生成的代碼”,會刪除生成的bll、controller類【可選】
第6步、輸入"4",選擇“升級項目”,會自動從碼云下載NetCoreFast最新代碼更新項目,因而建議不要更改NetCoreFast框架代碼,便于升級【可選】
第1步、輸入"2",選擇“Elementplus-admin-codegen后臺前端管理界面項目生成”
第2步、輸入"1",選擇“初始項目”。此過程會從碼云下載elementplus-admin-codegen原始項目,并將項目名改為項目文件夾的名字CMSUI.項目初始成功!
第3步、輸入"4",選擇“升級項目”,會自動從碼云下載elementplus-admin-codegen最新代碼更新項目,因而建議不要更改elementplus-admin-codegen代碼,便于升級【可選】
快速開發
"ConnectionStrings": {
本文中,讓我們嘗試構建自定義 HTML Hepler以在 .NET Core MVC 應用程序中提供分頁。首先對不熟悉的人簡單介紹一下,什么是HTML Helper(助手):
在Web應用程序中,如果要顯示大量記錄,則需要提供分頁。在本文中,我們通過創建自定義 HTML Helper 在 .NET Core MVC 應用程序中實現分頁。為了簡單起見,我們只能使用數字來表示數據。
假設我們需要在多頁中顯示 55 條記錄,每頁有 10 個項目,如上所示。
打開 Visual Studio 2019 > 創建 .NET Core MVC 應用程序,如下所示。
項目命名為 HTMLHelpersApp。
選擇 .NET 框架版本。
創建所需的模型和幫助文件。
在 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 類。
在 PageInfo.cs 中添加代碼:
根據總項目數和每頁項目數,計算頁面的總頁數、第一個項目和最后一個項目。
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 助手。
public static IHtmlContent PageLinks(this IHtmlHelper htmlHelper, PageInfo pageInfo, Func<int, string> PageUrl)
5.取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”。
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頁,且每頁都一個鏈接。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。