MVC中使用CKEditor01-基础

本文介绍在MVC框架中如何使用CKEditor富文本编辑器,包括安装、配置、前端引用及后端交互过程,展示了如何正确获取编辑器内容并进行数据验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇体验在MVC中使用CKEditor,仅仅算思路、基础,暂没有把验证等与CKEditor结合在一起考虑。

 

□ 1 使用NUGET引入CKEditor
PM> Install-Package CKEditor

 

引入后在Scripts中有了CKEditor的相关文件:
03

 

□ 2 View Model

using System.ComponentModel.DataAnnotations;
 
namespace MvcCKEditor.Models
{
    public class Article
    {
        public int ID { get; set; }
        [Required]
        [Display(Name = "主题")]
        public string Subject { get; set; }
 
        [Required]
        [Display(Name = "内容")]
        public string Content { get; set; }
    }
}

 

□ 3 不管在哪里引用,必须引用以下有关CKEditor的js文件
<script src="@Url.Content("~/Scripts/ckeditor/ckeditor.js")" type="text/javascript"></script>

 

□ 4 HomeController

有关显示添加视图和接收添加内容:
接收添加内容时,是通过把Dictionary<string,string>,把所有错误以键值对的形式放到这个字典集合里,再使用Newtonsoft.Json把这个集合转换成json字符串,最后让前台jquery判断。但在实际做项目中,可能用ModelState在后台验证,并把需要验证的部分放在部分视图里,可能更方便一些,暂不深究。


就像在ASP.NET WebForm开发的时,如果页面没有设置ValidateInput=false,就会出现警告。在MVC中如果不设置,也会报如下错:
01

 

设置允许CKEditor有2种方式:
1、在控制器方法

        [ValidateInput(false)]
        public ActionResult Create(string subject, string content)

 

2、Scripts/ckeditor/config.js中做全局设置 

CKEDITOR.editorConfig = function( config )
{
    // Define changes to default configuration here. For example:
    // config.language = 'fr';
    // config.uiColor = '#AADC6E';
 
    //也可以在这里做全局设置
    //config.htmlEncodeOutput = true;
};   

控制器与方法:

展开using System.Web.Mvc;
using MvcCKEditor.Models;
using Newtonsoft.Json;

namespace MvcCKEditor.Controllers
{
    public class HomeController : Controller
    {
        private List<Article> articles = null;

        public HomeController()
        {
            articles = new List<Article>
            {
                new Article(){ID =1,Subject = "主题1",Content = "内容1"},
                new Article(){ID = 2,Subject = "主题2",Content = "内容2"}
            };
        }

        public ActionResult Index()
        {
            
            return View(articles);
        }

        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        //[ValidateAntiForgeryToken]
        [ValidateInput(false)]
        public ActionResult Create(string subject, string content)
        {
            Dictionary<string,string> jo = new Dictionary<string, string>();
            if (string.IsNullOrEmpty(subject))
            {
                jo.Add("Msg","没有输入标题 ");
                return Content(JsonConvert.SerializeObject(jo), "application/json");
            }
            if (string.IsNullOrEmpty(content))
            {
                jo.Add("Msg", "没有输入内容 ");
                return Content(JsonConvert.SerializeObject(jo), "application/json");
            }
            try
            {
                Article article = new Article();
                article.Subject = subject;
                article.Content = content;
                articles.Add(article);
                jo.Add("Result","Success");
            }
            catch (Exception ex)
            {
                jo.Add("Result","Failure");
                jo.Add("ResultMessage", ex.Message);
            }
            return Content(JsonConvert.SerializeObject(jo), "application/json");
        }
    }
}

□ 5 Create.cshtml视图

获取CKEditor内容:

不能用var content = $('#content').val();获取CKEditor的内容。
因为TextArea的内容已经被CKEdtor替换掉了:var editor = CKEDITOR.editor.replace('content', { skin: 'kama', width: '800px' });
应该使用如下方式来获取CKEditor的内容:var content = editor.getData();

展开@model MvcCKEditor.Models.Article

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create</h2>

@using (Html.BeginForm("Create","Home",FormMethod.Post,new {id = "FormCreate"}))
{
    @Html.ValidationSummary(true)
    @Html.AntiForgeryToken()

    <fieldset>
        <legend>Article</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Subject)
        </div>
        <div class="editor-field">
            @Html.TextBox("subject",null,new {id="subject",style="width:400px",MaxLength="100"})
            @Html.ValidationMessageFor(model => model.Subject)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Content)
        </div>
        <div class="editor-field">
            @Html.TextArea("content",new {id="content", @name="content"})
            @Html.ValidationMessageFor(model => model.Content)
        </div>

        <p>
            <input type="button" value="创建" id="ButtonCreate" />
            @*<input type="submit" value="创建"/>*@
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
        
        var editor = CKEDITOR.editor.replace('content', {
            skin: 'kama',
            width: '800px'
        });


        $(function () {
        
            $('#ButtonCreate').click(function () {
                createArticle();
            });
        });

        function createArticle() {
            var subject = $.trim($('#subject').val());
            var content = editor.getData();

            if (subject.length == 0) {
                alert('请输入标题');
                return false;
            }
            if (content.length == 0) {
                alert('请输入内容');
                return false;
            }

            $.ajax({
                url: '@Url.Action("Create", "Home")',
                type: 'post',
                data: { subject: subject, content: content },
                cache: false,
                async: false,
                dataType: 'json',
                success: function(data) {
                    if (data.Msg) {
                        alert(data.Msg);
                        return false;
                    } else {
                        if (data.Result == 'Success') {
                            alert('Success');
                            location.href = '@Url.Action("Index", "Home")';
                        } else {
                            alert(data.ResultMessage);
                            return false;
                        }                           
                    }
                }
            });
        }
    </script>
}

结果:
02

 

参考资料:
ASP.NET MVC 3 使用CKEditor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值