[研究]ASP.NET, 夏日筆記 Summernote 1.0.3 WYSIWYG HTML Editor 試用 (MIT)
2024-04-09
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19
********************************************************************************
使用 MIT License 授權
範例:https://summernote.org/examples/
********************************************************************************
Summernote 相依套件 jQuery 和 Bootstrap 3.x ~5.x。
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication1.Default" %>
<!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>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous" />
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<textarea id="summernote" name="summernote" runat="server"
style="width: 650px; height: 250px;"></textarea>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
<script>
$(document).ready(function () {
$('#summernote').summernote({
placeholder: 'Hello Bootstrap 4',
height: 300,
toolbar: [
['fontname', ['fontname']],
['fontsize', ['fontsize']],
['style', ['bold', 'italic', 'underline', 'clear']],
['font', ['strikethrough', 'superscript', 'subscript']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['height', ['height']],
['table', ['table']],
['insert', ['link', 'picture', 'video']],
['view', ['codeview']]
]
});
});
</script>
</body>
</html>
|
Default.aspx.cs
using System;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = summernote.InnerText;
}
}
}
|
********************************************************************************
Summernote 相依套件 jQuery 和 Bootstrap 3.x ~5.x。
packages.config
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="bootstrap" version="5.3.3" targetFramework="net481" /> <package id="FontAwesome" version="4.7.0" targetFramework="net481" /> <package id="jQuery" version="3.7.1" targetFramework="net481" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="4.1.0" targetFramework="net481" /> <package id="popper.js" version="1.16.1" targetFramework="net481" /> <package id="summernote" version="1.0.3" targetFramework="net481" /> </packages> |
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!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>
<link href="Content/font-awesome.min.css" rel="stylesheet" />
<script src="Scripts/jquery-3.7.1.min.js"></script>
<link href="Content/bootstrap.css" rel="stylesheet" />
<script src="Scripts/bootstrap.min.js"></script>
<link href="Scripts/summernote/summernote.css" rel="stylesheet" />
<script src="Scripts/summernote/summernote.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" TextMode="MultiLine"
Rows="10" Columns="80" runat="server"></asp:TextBox>
</form>
<script>
$(document).ready(function () {
$('#<%= TextBox1.ClientID %>').summernote();
});
</script>
</body>
</html>
|
Default.aspx.cs
using System;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = TextBox1.InnerText;
}
}
}
|
bootstrap.css 若缺失,如下
jquery-3.7.1.min.js 或 bootstrap.min.js 或 summernote.min.js 若缺失
Default.aspx 中,若在 DetailsView1 的 <EditItemTemplate> 中,DefaultMode="Edit" 必須設定。
ValidateRequest="false" 必須。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication1.Default" ValidateRequest="false" %>
<!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>
<link href="Content/font-awesome.min.css" rel="stylesheet" />
<link href="Scripts/summernote/summernote.css" rel="stylesheet" />
<script type="text/javascript" src="Scripts/jquery-3.7.1.min.js"></script>
<link href="Content/bootstrap.css" rel="stylesheet" />
<script type="text/javascript" src="Scripts/bootstrap.min.js"></script>
<script type="text/javascript" src="Scripts/summernote/summernote.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" Rows="10" Columns="80"></asp:TextBox><br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyDBConnectionString %>"
DeleteCommand="DELETE FROM [MyTable] WHERE [SN] = @SN"
InsertCommand="INSERT INTO [MyTable] ([Field1], [Field2]) VALUES (@Field1, @Field2)"
SelectCommand="SELECT * FROM [MyTable]"
UpdateCommand="UPDATE [MyTable] SET [Field1] = @Field1, [Field2] = @Field2 WHERE [SN] = @SN">
<DeleteParameters>
<asp:Parameter Name="SN" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Field1" Type="String" />
<asp:Parameter Name="Field2" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Field1" Type="String" />
<asp:Parameter Name="Field2" Type="String" />
<asp:Parameter Name="SN" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:DetailsView ID="DetailsView1" runat="server"
DefaultMode="Edit"
AutoGenerateRows="False" DataKeyNames="SN" DataSourceID="SqlDataSource1">
<Fields>
<asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" />
<asp:TemplateField HeaderText="Field1" SortExpression="Field1">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Field1") %>'
TextMode="MultiLine" Rows="20" Columns="80" ></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Field1") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Field1") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Field2" HeaderText="Field2" SortExpression="Field2" />
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" style="height: 21px" />
</form>
<script type="text/javascript">
$(document).ready(function () {
$('#TextBox2').summernote({
placeholder: 'Hello World',
height: 200,
toolbar: [
['fontname', ['fontname']],
['fontsize', ['fontsize']],
['style', ['bold', 'italic', 'underline', 'clear']],
['font', ['strikethrough', 'superscript', 'subscript']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['height', ['height']],
['table', ['table']],
['insert', ['link', 'picture', 'video']],
['view', ['codeview']]
]
});
var textBox = $('#<%= DetailsView1.FindControl("TextBox1").ClientID %>');
textBox.summernote(
{
height: 150
}
);
});
</script>
</body>
</html>
|
2024-10-24 補,白色底
<script type="text/javascript">
$(document).ready(function () {
var textBox = $('#<%= DetailsView1.FindControl("TextBox_NewsContent").ClientID %>');
textBox.summernote({
placeholder: '請輸入內容...',
tabsize: 2,
height: 150
});
// Set background color to white
$('.note-editable').css('background-color', 'white');
});
</script>
|
2024-10-25 補,使用 MasterPage.master 並設定 CSS Class 的狀況
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="Content/font-awesome.min.css" rel="stylesheet" />
<link href="Scripts/summernote/summernote.css" rel="stylesheet" />
<script type="text/javascript" src="Scripts/jquery-3.7.1.min.js"></script>
<link href="Content/bootstrap.css" rel="stylesheet" />
<script type="text/javascript" src="Scripts/bootstrap.min.js"></script>
<script type="text/javascript" src="Scripts/summernote/summernote.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(".summernoteCssClass").summernote({
placeholder: '請輸入內容...',
tabsize: 2,
height: 200
});
// Set background color to white
$('.note-editable').css('background-color', 'white');
});
</script>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
|
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Rows="10" Columns="80"
CssClass="summernoteCssClass" Text='<%# Bind("HTMLContent") %>'></asp:TextBox>
<span style="color:red">註:「HTML內容」欄位,按下右上角【</>】按鈕,可以檢視 HTML 原始碼。</span><br />
|
2024-10-25 補,預設按下 Code View 按鈕 (但敝人測試無效)
<script>
$(document).ready(function() {
$('#summernote').summernote({
height: 300, // 設置編輯器的高度
codeviewFilter: false, // 禁用 Code View 過濾
codeviewIframeFilter: true, // 啟用 iframe 過濾
callbacks: {
onInit: function() {
// 初始化後,直接進入 Code View 模式
$(this).summernote('codeview.toggle');
}
}
});
});
</script>
|
<!-- CSS Files --> <link href="Content/bootstrap.css" rel="stylesheet" /> <link href="Content/font-awesome.min.css" rel="stylesheet" /> <link href="Scripts/summernote/summernote.css" rel="stylesheet" /> <!-- JavaScript Files --> <script type="text/javascript" src="Scripts/jquery-3.7.1.min.js"></script> <script type="text/javascript" src="Scripts/bootstrap.min.js"></script> <script type="text/javascript" src="Scripts/summernote/summernote.min.js"></script> <!-- Custom JavaScript -->
<script type="text/javascript">
$(document).ready(function () {
$(".summernoteCssClass").summernote({
placeholder: '請輸入內容...',
tabsize: 2,
height: 200
});
// Set background color to white
$('.note-editable').css('background-color', 'white');
});
</script> |
- CSS:將 bootstrap.css 放在最前,這樣其他 CSS(如 Font Awesome 和 Summernote)可以根據 Bootstrap 設定進行增補和覆蓋。
- JavaScript:將 jquery 放在最前,因為 bootstrap.min.js 和 summernote.min.js 都依賴於 jquery。
- Custom JavaScript:將自訂的 JavaScript 放在最後,這樣能確保所有庫已載入並可供使用。
相關










沒有留言:
張貼留言