Google Code Prettify

如何改善"未捕獲的例外異常"的發生

System.ObjectDisposedException: 'The response has been aborted due to an unhandled application exception.' 是一個通用錯誤,表示在 ASP.NET Core 應用程序中,對 HTTP 回應的處理過程中發生了異常,導致回應被中止。

以下是可能的原因及解決方法:


1. 未捕獲的例外異常

這是最常見的情況。應用程序內部發生了異常(例如空指針引用、文件未找到等),但未被處理。

解決方法

  • 確保所有異常都被正確處理,特別是在控制器中處理用戶請求的地方。
  • 使用全局異常處理中間件來捕捉未處理的異常。

範例:使用全局異常處理中間件

Program.cs 中添加以下代碼:

csharp

app.UseExceptionHandler("/Home/Error"); // 將未處理的異常重定向到特定頁面 app.UseHsts();

錯誤頁面控制器

csharp

public IActionResult Error() { var errorDetails = HttpContext.Features.Get<IExceptionHandlerPathFeature>(); // 可以記錄日誌或自定義錯誤頁面 return View(errorDetails); }

2. HTTP 回應過早完成或被中止

ASP.NET Core 偶爾會因某些未正確同步的邏輯導致異常,例如在 HTTP 請求完成後仍試圖訪問 HttpResponse 對象。

解決方法

檢查所有操作中是否存在異步操作沒有被正確 await 的情況,確保所有異步代碼都遵循正確的流程。

範例:修正錯誤的異步邏輯

錯誤的代碼:

csharp

public async Task<IActionResult> MyAction() { var task = SomeAsyncOperation(); // 未 await return Ok(); // HTTP 回應已完成 await task; // 異常發生 }

正確的代碼:

csharp

public async Task<IActionResult> MyAction() { await SomeAsyncOperation(); // 確保異步操作完成 return Ok(); }

3. 部分視圖或視圖渲染失敗

如果您正在渲染部分視圖或完整視圖,異常可能發生在視圖中,例如模型為空或類型不匹配。

解決方法

檢查視圖的模型是否正確,並在控制器中使用 try-catch 捕獲可能的異常。

範例:捕獲視圖異常

csharp

try { return PartialView("_MyPartial", model); } catch (Exception ex) { // 記錄異常日誌 return StatusCode(500, "部分視圖渲染失敗"); }

4. 資源被提前釋放

在 ASP.NET Core 中,某些異常可能由於 HttpContextHttpResponse 被過早釋放而引發。

解決方法

確保在異步操作中不會過早釋放資源,並且任何與 HttpContextHttpResponse 相關的操作都在請求上下文內執行。

範例:正確使用 HttpContext

錯誤的代碼:

csharp

public async Task<IActionResult> MyAction() { var response = HttpContext.Response; // 在請求上下文結束後仍嘗試操作 response await Task.Delay(1000); response.WriteAsync("Hello"); // 可能導致異常 return Ok(); }

正確的代碼:

csharp

public async Task<IActionResult> MyAction() { await HttpContext.Response.WriteAsync("Hello"); return Ok(); }

5. 中間件配置問題

如果您使用自定義中間件,可能未正確處理 next 或異常。

解決方法

檢查所有自定義中間件是否正確地調用了 await next(context)

範例:正確的中間件設置

csharp

public class MyMiddleware { private readonly RequestDelegate _next; public MyMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception ex) { // 捕捉異常並處理 await context.Response.WriteAsync("中間件異常處理"); } } }

6. 日誌記錄

為了確定具體的錯誤原因,建議啟用詳細的日誌記錄。

appsettings.json 中啟用詳細日誌:

json

{ "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Warning" } } }

7. 總結

要解決 System.ObjectDisposedException 錯誤,請採取以下步驟:

  1. 確保代碼邏輯中異常被正確捕獲。
  2. 確認異步操作是否正確 await
  3. 檢查模型與視圖是否匹配。
  4. 測試和驗證中間件的執行流程。
  5. 啟用日誌記錄以追蹤問題源頭。

ASP.NET Core 9.0 在 .NET 9 是新增加了什麼?

ASP.NET Core 9.0 随着 .NET 9 的发布,引入了多项新功能和改进,主要包括以下方面:

1. 静态资产传递优化

引入了 MapStaticAssets 中间件,用于优化应用程序中静态资产的传递。该功能旨在减少提供给浏览器的资产大小,降低网络传输的字节数,并避免向客户端提供过时的文件版本。这对于所有 UI 框架(如 Blazor、Razor Pages 和 MVC)都适用,是 UseStaticFiles 的替代方法。

2. Blazor 的新功能

  • 改进的服务器端重新连接体验:当用户返回已断开连接的应用时,系统会立即尝试重新连接,页面会自动刷新,避免用户手动刷新。

  • 简化的身份验证状态序列化:通过新的 API,更轻松地向现有 Blazor Web 应用添加身份验证。默认情况下,服务器端仅序列化名称和角色声明。

3. SignalR 的新功能

中心方法现在支持多态类型,允许接受基类参数以实现多态方案。需要对基类型进行注释以实现多态性。

4. 最小 API 的新功能

  • TypedResults 类增强:添加了 InternalServerError 方法,用于从终结点返回 500 内部服务器错误响应。

  • 改进的 ProblemValidationProblem 结果类型构建:支持使用 IEnumerable<KeyValuePair<string, object?>> 初始化 errorsextensions 属性。

5. 内置 OpenAPI 支持

ASP.NET Core 现在提供内置支持,通过 Microsoft.AspNetCore.OpenApi 包生成基于控制器的 API 或最小 API 的 OpenAPI 文档。该功能支持裁剪和本机 AOT。

6. 身份验证和授权的新功能

OpenIdConnectHandler 现在支持推送授权请求(PAR),以防止浏览器中的网络攻击者查看或篡改授权参数。

7. 其他新功能

  • HybridCache:弥补了现有 IDistributedCacheIMemoryCache API 的差距,添加了如“踩踏”保护和可配置序列化等新功能。

  • 开发人员异常页改进:将终结点元数据添加到开发人员异常页面,改进了字典和其他键值集合的调试显示。

  • IIS 中应用程序回收期间的 503 错误修复:默认情况下,IIS 在收到回收或关闭通知与 ANCM 通知托管服务器启动关闭之间有 1 秒的延迟。

  • 指标改进:在生产环境中以最小影响继续使用,用于调查性能问题和观察对 Kestrel 造成影响的外部攻击。

这些更新旨在提升 ASP.NET Core 的性能、安全性和开发体验。

要如何使用EastAsianLunisolarCalendar類別庫來完成陽曆年與陰曆年的日期轉換

 在 ASP.NET Core 中,使用 EastAsianLunisolarCalendar 類別庫(具體來說是 ChineseLunisolarCalendar 類別)來完成陽曆(公曆)與陰曆(農曆)的日期轉換是一個常見的需求。下面將詳細介紹如何使用這些類別來實現日期的相互轉換,包括具體的步驟和範例程式碼。

1. 了解 EastAsianLunisolarCalendar 及其具體實現

EastAsianLunisolarCalendarSystem.Globalization 命名空間中的一個抽象類別,專門用於處理東亞的陰陽曆。具體的實現類別包括:

  • ChineseLunisolarCalendar
  • JapaneseLunisolarCalendar
  • TaiwanLunisolarCalendar
  • KoreanLunisolarCalendar

在這裡,我們以 ChineseLunisolarCalendar 為例來說明如何進行陽曆與陰曆之間的轉換。

2. 引用必要的命名空間

首先,確保在你的 C# 檔案中引用了必要的命名空間:


using System; using System.Globalization;

3. 初始化 ChineseLunisolarCalendar

建立 ChineseLunisolarCalendar 的實例:


ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar();

4. 陽曆轉陰曆(公曆轉農曆)

要將陽曆日期轉換為陰曆日期,可以使用 GetYearGetMonthGetDayOfMonth 方法來獲取農曆的年、月、日。

範例程式碼


using System; using System.Globalization; public class DateConversion { public static void GregorianToLunisolar(DateTime gregorianDate) { ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar(); int year = chineseCalendar.GetYear(gregorianDate); int month = chineseCalendar.GetMonth(gregorianDate); int day = chineseCalendar.GetDayOfMonth(gregorianDate); bool isLeapMonth = chineseCalendar.IsLeapMonth(gregorianDate); Console.WriteLine("陽曆日期: " + gregorianDate.ToString("yyyy-MM-dd")); Console.WriteLine("農曆日期: " + year + "年 " + (isLeapMonth ? "閏" : "") + chineseCalendar.GetMonthName(month) + "月 " + day + "日"); } public static void Main() { DateTime today = DateTime.Today; GregorianToLunisolar(today); } }

輸出範例


陽曆日期: 2024-04-27 農曆日期: 2024年 三月 19日

5. 陰曆轉陽曆(農曆轉公曆)

將農曆日期轉換為陽曆日期相對複雜,因為需要指定年份、月份(包括是否為閏月)和日期。ChineseLunisolarCalendar 提供了 ToDateTime 方法來完成這一轉換。

範例程式碼


using System; using System.Globalization; public class DateConversion { public static void LunisolarToGregorian(int year, int month, int day, bool isLeapMonth = false) { ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar(); try { DateTime gregorianDate = chineseCalendar.ToDateTime(year, month, day, 0, 0, 0, 0, isLeapMonth); Console.WriteLine("農曆日期: " + year + "年 " + (isLeapMonth ? "閏" : "") + chineseCalendar.GetMonthName(month) + "月 " + day + "日"); Console.WriteLine("陽曆日期: " + gregorianDate.ToString("yyyy-MM-dd")); } catch (ArgumentOutOfRangeException ex) { Console.WriteLine("日期轉換失敗: " + ex.Message); } } public static void Main() { // 例子: 2024年三月十九日 LunisolarToGregorian(2024, 3, 19, false); } }

輸出範例

農曆日期: 2024年 三月 19日
陽曆日期: 2024-04-27

6. 處理閏月

閏月是農曆中每隔幾年會出現的一個額外月份,用於調整農曆與陽曆之間的差距。在 ChineseLunisolarCalendar 中,閏月的判斷可以通過 IsLeapMonth 方法完成。

檢查是否為閏月


bool isLeap = chineseCalendar.IsLeapMonth(2024, 4); // 2024年農曆四月是否為閏月 Console.WriteLine(isLeap ? "是閏月" : "不是閏月");

範例程式碼


using System; using System.Globalization; public class DateConversion { public static void CheckLeapMonth(int year, int month) { ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar(); bool isLeap = chineseCalendar.IsLeapMonth(year, month); Console.WriteLine(year + "年農曆" + month + "月" + (isLeap ? "是閏月" : "不是閏月")); } public static void Main() { // 例子: 2024年農曆四月 CheckLeapMonth(2024, 4); } }

輸出範例


2024年農曆4月不是閏月

7. 完整範例:Master-Detail 表單日期轉換

假設你有一個 Master-Detail 表單,其中 Master 表包含一些基本信息,Detail 表包含多個與 Master 相關的日期字段。你想要在表單中提供陽曆和陰曆的日期轉換功能。

1. 定義模型


public class MasterModel { public int MasterId { get; set; } public string ClassName { get; set; } public List<DetailModel> Details { get; set; } } public class DetailModel { public int DetailId { get; set; } public int MasterId { get; set; } public string StudentName { get; set; } public int StudentAge { get; set; } public DateTime GregorianDate { get; set; } public string LunisolarDate { get; set; } }

2. 創建 ViewModel


public class MasterDetailViewModel { public MasterModel Master { get; set; } public List<DetailModel> Details { get; set; } }

3. 創建 Controller


using Microsoft.AspNetCore.Mvc; using System; using System.Globalization; using System.Threading.Tasks; public class OrdersController : Controller { // GET: Orders/Create public IActionResult Create() { var viewModel = new MasterDetailViewModel { Master = new MasterModel(), Details = new List<DetailModel> { new DetailModel() } }; return View(viewModel); } // POST: Orders/Create [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create(MasterDetailViewModel viewModel) { if (ModelState.IsValid) { // 使用 Entity Framework Core 將資料保存到資料庫 // 假設你已經配置了 ApplicationDbContext using (var context = new ApplicationDbContext()) { context.Masters.Add(viewModel.Master); await context.SaveChangesAsync(); foreach (var detail in viewModel.Details) { detail.MasterId = viewModel.Master.MasterId; // 使用 ChineseLunisolarCalendar 進行日期轉換 ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar(); int year = chineseCalendar.GetYear(detail.GregorianDate); int month = chineseCalendar.GetMonth(detail.GregorianDate); int day = chineseCalendar.GetDayOfMonth(detail.GregorianDate); bool isLeapMonth = chineseCalendar.IsLeapMonth(detail.GregorianDate); detail.LunisolarDate = $"{year}{(isLeapMonth ? "閏" : "")}{month}{day}日"; context.Details.Add(detail); } await context.SaveChangesAsync(); } return RedirectToAction(nameof(Success)); } return View(viewModel); } public IActionResult Success() { return View(); } }

4. 創建視圖 Create.cshtml


@model MasterDetailViewModel @{ ViewData["Title"] = "Create Order"; } <h2>@ViewData["Title"]</h2> <form asp-action="Create" method="post"> <div> <label asp-for="Master.ClassName"></label> <input asp-for="Master.ClassName" class="form-control" /> <span asp-validation-for="Master.ClassName" class="text-danger"></span> </div> <h3>Details</h3> <table id="details-table" class="table"> <thead> <tr> <th>Student Name</th> <th>Student Age</th> <th>Gregorian Date</th> <th>Lunisolar Date</th> <th>Actions</th> </tr> </thead> <tbody> @for (int i = 0; i < Model.Details.Count; i++) { <tr> <td> <input asp-for="Details[@i].StudentName" class="form-control" /> <span asp-validation-for="Details[@i].StudentName" class="text-danger"></span> </td> <td> <input asp-for="Details[@i].StudentAge" class="form-control" /> <span asp-validation-for="Details[@i].StudentAge" class="text-danger"></span> </td> <td> <input asp-for="Details[@i].GregorianDate" type="date" class="form-control" /> <span asp-validation-for="Details[@i].GregorianDate" class="text-danger"></span> </td> <td> @Model.Details[i].LunisolarDate </td> <td> <button type="button" class="btn btn-danger" onclick="removeDetail(this)">Remove</button> </td> </tr> } </tbody> </table> <button type="button" class="btn btn-secondary" onclick="addDetail()">Add Detail</button> <input type="submit" value="Save" class="btn btn-primary" /> </form> @section Scripts { <partial name="_ValidationScriptsPartial" /> <script> function addDetail() { var index = $('#details-table tbody tr').length; var newRow = ` <tr> <td> <input name="Details[` + index + `].StudentName" class="form-control" /> <span class="text-danger"></span> </td> <td> <input name="Details[` + index + `].StudentAge" class="form-control" /> <span class="text-danger"></span> </td> <td> <input name="Details[` + index + `].GregorianDate" type="date" class="form-control" /> <span class="text-danger"></span> </td> <td></td> <td> <button type="button" class="btn btn-danger" onclick="removeDetail(this)">Remove</button> </td> </tr>`; $('#details-table tbody').append(newRow); } function removeDetail(btn) { $(btn).closest('tr').remove(); } </script> }

5. 配置資料庫上下文 ApplicationDbContext

確保你已經創建了 ApplicationDbContext 並正確配置了資料庫連接。這裡是一個基本的例子:


using Microsoft.EntityFrameworkCore; public class ApplicationDbContext : DbContext { public DbSet<MasterModel> Masters { get; set; } public DbSet<DetailModel> Details { get; set; } public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<MasterModel>() .HasMany(m => m.Details) .WithOne(d => d.Master) .HasForeignKey(d => d.MasterId); base.OnModelCreating(modelBuilder); } }

6. 執行資料庫遷移

使用 Entity Framework Core 來創建和更新資料庫結構。


dotnet ef migrations add InitialCreate dotnet ef database update

7. 顯示轉換結果

DetailsLunisolarDate 屬性中,已經在 Controller 中轉換好了農曆日期並存入資料庫。你可以在成功頁面或其他地方顯示這些轉換結果。

8. 完整範例說明

上述範例展示了一個簡單的 Master-Detail 表單,其中:

  • MasterModel 包含 ClassName
  • DetailModel 包含 StudentNameStudentAgeGregorianDate(陽曆日期)和 LunisolarDate(陰曆日期)。
  • 在表單提交時,Controller 會將 Master 和 Detail 資料保存到資料庫,並使用 ChineseLunisolarCalendar 來轉換陽曆日期為陰曆日期。
  • 使用 JavaScript 動態添加和刪除 Detail 表單項目。

9. 注意事項

  1. 日期範圍ChineseLunisolarCalendar 支持的日期範圍有限,確保輸入的日期在支持範圍內(一般為1901年到9999年)。

  2. 閏月處理:在轉換過程中,需要考慮閏月的情況。上面的範例中,轉換後的陰曆日期中已經包括了閏月信息。

  3. 驗證:在處理日期轉換時,應該加入必要的驗證,確保輸入的日期格式正確,並處理可能的轉換錯誤。

  4. 本地化:如果你的應用需要支持多語言,考慮將日期格式本地化,以適應不同語言環境下的顯示需求。

10. 總結

通過上述步驟,你可以在 ASP.NET Core 中實現一個 Master-Detail 表單,並使用 ChineseLunisolarCalendar 類別來完成陽曆與陰曆的日期轉換。這種方法不僅可以確保數據的準確性,還能提高應用的靈活性和可擴展性。如果有更多需求或複雜的場景,可以進一步擴展這個基礎範例。

jquery ajax 如何使用async / await

在jQuery 中,雖然本身不直接支援async/ await,但可以結合現代JavaScript 的Promiseasync/await來處理非同步請求。$.ajax本質上返回的是一個Promise對象,這意味著你可以使用async/await來簡化非同步程式碼的寫法。

1. 基本用法

假設你有一個jQuery$.ajax請求,你可以將它包裝在async函數中,並使用await來等待請求完成。

範例程式碼


async function sendDataAsync() { try { let response = await $.ajax({ url: '/YourController/YourAction', type: 'POST', data: { inputData: 'someData' }, contentType: 'application/json' }); console.log('服务器回馈信息:', response); } catch (error) { console.error('发生错误:', error); } }

2. 詳細步驟

1. 定義一個async函數

你可以將AJAX 請求封裝在一個async函數中。這樣,函數在遇到await時會暫停,直到非同步操作完成後繼續執行。

2. 使用await等待AJAX​​ 請求

$.ajax回傳一個Promise,因此你可以使用await來等待它完成,並取得結果。

3. 處理錯誤

使用try/catch區塊來擷取並處理AJAX 請求中的錯誤。

3. 結合async/await和jQuery AJAX 請求

以下是一個更完整的例子,展示如何使用async/await來進行非同步的AJAX 請求,發送資料到伺服器並處理返回資料。

伺服器端程式碼(ASP.NET Core 範例)


[HttpPost] public JsonResult YourAction(string inputData) { var result = new { message = "成功接收数据: " + inputData }; return Json(result); }

前端程式碼(使用async/ await


async function sendDataAsync() { try { // 发起异步的 AJAX 请求 let response = await $.ajax({ url: '/YourController/YourAction', // 替换为你的 URL type: 'POST', data: JSON.stringify({ inputData: '一些数据' }), // 发送 JSON 数据 contentType: 'application/json', // 指定数据类型 }); // 请求成功时,处理返回的结果 console.log('服务器回馈信息:', response.message); alert('服务器回馈信息: ' + response.message); } catch (error) { // 处理请求中的错误 console.error('发生错误:', error); alert('发生错误: ' + error.statusText); } } // 调用异步函数 sendDataAsync();

4. 處理多個非同步AJAX 請求

你也可以使用async/await來處理多個並行或串列的AJAX 請求。

串行請求(一個接一個執行)


async function sendMultipleRequests() { try { let response1 = await $.ajax({ url: '/api/request1', type: 'GET' }); console.log('请求1完成:', response1); let response2 = await $.ajax({ url: '/api/request2', type: 'GET' }); console.log('请求2完成:', response2); } catch (error) { console.error('请求失败:', error); } }

並行請求(同時執行多個請求)


async function sendParallelRequests() { try { let [response1, response2] = await Promise.all([ $.ajax({ url: '/api/request1', type: 'GET' }), $.ajax({ url: '/api/request2', type: 'GET' }) ]); console.log('请求1和请求2同时完成:', response1, response2); } catch (error) { console.error('请求失败:', error); } }

5. 總結

  • $.ajax回傳一個Promise,你可以用async/await來處理它。
  • 使用async/await可以讓程式碼更具可讀性,避免回調地獄。
  • try/catch處理AJAX 請求中的錯誤,確保程式碼健壯。

透過使用async/ await,可以更直觀地編寫非同步程式碼,尤其在處理多個請求時,它比傳統的回呼函數方式更加簡潔清晰。

使用jQuery AJAX 發送資料後,您可以透過回呼函數取得伺服器端傳回的資料

使用jQuery AJAX 發送資料後,您可以透過回呼函數取得伺服器端傳回的資料。如果伺服器端傳回的資料包含ViewBag中的訊息,可以透過JsonResult或部分視圖的HTML 直接傳遞這些訊息。


1. 使用JsonResult返回ViewBag數據

假設在伺服器端,您在Controller中設定了ViewBag,然後將資料通過JsonResult傳回給前端。

伺服器端程式碼


[HttpPost] public JsonResult SubmitData(string inputData) { // 假设进行了一些操作,并设置了 ViewBag ViewBag.Message = "操作成功"; // 将 ViewBag 数据放入一个匿名对象中,并通过 JSON 返回 return Json(new { message = ViewBag.Message }); }

前端jQuery 程式碼


$.ajax({ type: 'POST', url: '/YourController/SubmitData', data: { inputData: yourData }, success: function(response) { // 这里的 response.message 就是服务器端返回的 ViewBag 数据 console.log('服务器回馈信息: ' + response.message); }, error: function(xhr, status, error) { console.error('发生错误: ' + error); } });


2. 使用部分視圖(Partial View)傳回包含ViewBag資料的HTML

您也可以透過傳回部分視圖,將ViewBag資料嵌入到HTML 中,jQuery 可以從傳回的HTML 中提取這些資料。

伺服器端程式碼


[HttpPost]
public PartialViewResult SubmitData(string inputData) { ViewBag.Message = "操作成功"; // 返回部分视图,这里可以是包含 ViewBag 数据的 HTML return PartialView("_PartialViewName"); }

部分視圖_PartialViewName.cshtml


<div id="message"> @ViewBag.Message </div>

前端jQuery 程式碼


$.ajax({ type: 'POST', url: '/YourController/SubmitData', data: { inputData: yourData }, success: function(response) { // 将返回的 HTML 插入到页面的某个元素中 $('#result').html(response); // 从返回的 HTML 中提取 ViewBag 数据 var message = $('#result #message').text(); console.log('服务器回馈信息: ' + message); }, error: function(xhr, status, error) { console.error('发生错误: ' + error); } });


3. 使用TempData傳遞訊息

如果您想要跨請求傳遞數據,您可以使用TempData。以下是如何透過TempData傳遞資料:

伺服器端程式碼


[HttpPost] public IActionResult SubmitData(string inputData) { TempData["Message"] = "操作成功"; return RedirectToAction("SomeAction"); // 重定向到一个新的视图 } public IActionResult SomeAction() { ViewBag.Message = TempData["Message"]; return View(); }

前端jQuery 程式碼

如果使用TempData,通常會在前端顯示新載入的頁面,而不直接在AJAX 回呼中取得資料。


總結

使用jQuery AJAX 發送請求後,可以透過回呼函數的response參數來取得伺服器端傳回的JsonResult資料或HTML 部分視圖。你可以透過JsonResult直接傳遞ViewBag數據,或透過部分視圖傳回包含ViewBag數據的HTML 片段。

bool ret = default; ret的結果是什麼?

在 C# 中,default 關鍵字用於生成指定類型的默認值。當用於 bool 類型時,default 會生成 false,因為 falsebool 類型的默認值。

因此,下面的代碼:

csharp

bool ret = default;

會將 ret 設置為 false


更詳細的解釋

  • 數值類型 (int, float, double 等):默認值是 0
  • 引用類型 (class, string 等):默認值是 null
  • 布爾類型 (bool):默認值是 false
  • 結構 (struct):默認值是所有成員設置為其默認值的結構。
  • 枚舉 (enum):默認值是 0 對應的枚舉成員。

因此,在這段代碼中:

csharp

bool ret = default; Console.WriteLine(ret); // Output: False

ret 的值將是 false

這是因為 bool 類型的默認值在 C# 中是 false

關於jquery.tinymce.min.js有那些較好的學習或範例資料?

以下是一些學習和範例資料,用於了解和使用 jquery.tinymce.min.js,這些資源可以幫助你更好地掌握如何將 TinyMCE 與 jQuery 結合使用。

官方資源

  1. TinyMCE 官方文檔

    • TinyMCE 官方網站提供了詳細的文檔和範例,可以幫助你了解如何配置和使用 TinyMCE 與 jQuery 結合。
    • TinyMCE 官方文檔
  2. TinyMCE jQuery 整合指南

    • 這是 TinyMCE 官方提供的專門針對 jQuery 整合的文檔,內容詳盡且有許多範例。
    • jQuery Integration

在線範例和教程

  1. CodePen

    • CodePen 是一個非常好的資源,你可以在這裡找到許多關於 TinyMCE 和 jQuery 的範例代碼。
    • 搜索 "TinyMCE jQuery" 或者 "jquery.tinymce.min.js" 可以找到相關的範例。
    • CodePen
  2. JSFiddle

    • JSFiddle 是另一個很好的在線編輯器和分享平台,你可以找到和創建 TinyMCE 與 jQuery 的範例。
    • JSFiddle

博客和文章

  1. Dev.to

    • Dev.to 上有許多開發者分享的博客和文章,涵蓋了各種技術主題,包括 TinyMCE 和 jQuery 的使用。
    • 搜索 "TinyMCE jQuery" 可以找到相關的文章。
    • Dev.to
  2. Medium

    • Medium 上也有許多開發者分享的文章,可以幫助你了解 TinyMCE 與 jQuery 的整合和使用。
    • Medium

教學視頻

  1. YouTube
    • YouTube 上有許多開發者錄製的教學視頻,演示了如何在不同的項目中使用 TinyMCE 和 jQuery。
    • 搜索 "TinyMCE jQuery tutorial" 可以找到相關的視頻。
    • YouTube

簡單範例

下面是一個簡單的範例,展示如何在 ASP.NET Core 項目中使用 jquery.tinymce.min.js

1. 引入必要的資源

在你的視圖中引入 jQuery 和 TinyMCE:

html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/jquery.tinymce.min.js" referrerpolicy="origin"></script> </head> <body> <form method="post"> <textarea id="mytextarea">Hello, World!</textarea> <button type="submit">Submit</button> </form> <script> $(document).ready(function() { $('#mytextarea').tinymce({ language: 'zh_TW', // 設置語言為繁體中文 plugins: 'link image', // 僅啟用必要的插件 valid_elements: 'p,b,i,strong,em,a[href|title],ul,ol,li' // 僅允許這些元素和屬性 }); }); </script> </body> </html>

2. 設置 ASP.NET Core 控制器和視圖

創建一個控制器來處理表單提交:

csharp

using Microsoft.AspNetCore.Mvc; public class HomeController : Controller { [HttpGet] public IActionResult Index() { return View(); } [HttpPost] public IActionResult Index(string content) { // 在這裡處理提交的內容,並執行必要的安全檢查 ViewBag.Content = content; return View(); } }

創建視圖 Index.cshtml

html

@{ ViewData["Title"] = "Home Page"; } <form method="post"> <textarea id="mytextarea" name="content">Hello, World!</textarea> <button type="submit">Submit</button> </form> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/jquery.tinymce.min.js" referrerpolicy="origin"></script> <script> $(document).ready(function() { $('#mytextarea').tinymce({ language: 'zh_TW', // 設置語言為繁體中文 plugins: 'link image', // 僅啟用必要的插件 valid_elements: 'p,b,i,strong,em,a[href|title],ul,ol,li' // 僅允許這些元素和屬性 }); }); </script> @if (ViewBag.Content != null) { <div> <h2>Submitted Content</h2> <div>@Html.Raw(ViewBag.Content)</div> </div> }

總結

通過這些資源和範例,你可以更深入地了解如何在 ASP.NET Core 中使用 jquery.tinymce.min.js,並確保使用過程中的安全性。如果你有任何具體的問題或需求,可以隨時查閱上述資源或尋求社區的幫助。