Frage

Ich möchte das verwenden AS Online -Code -Editor in meinem Projekt. Wie verwende ich es in ASP.NET MVC?

Ich möchte sparen, welche Änderungen mit diesem Editor in der Datenbank vorgenommen werden. Wie mache ich das?

War es hilfreich?

Lösung

Nehmen wir an, Sie haben ein stark getipptes Modell mit einer Eigenschaft namens namens Editor mit den Daten darin. Verwenden Sie nun einen Normalen <div> So laden die Daten:

<div id="editor"><%=Model.Editor %></div>

Jetzt können Sie mit JavaScript einen ACE -Editor anstelle des DIV erstellen:

<script src="src/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
window.onload = function() {
    var editor = ace.edit("editor");
};
</script>

Wenn Sie nun die Daten speichern möchten, zum Beispiel über einen Formularbeitrag, verwenden Sie so etwas, um sie wieder an die zu binden Editor Eigenschaft des Modells:

<%=Html.HiddenFor(m=>m.Editor, new { @id = "hidden_editor" }) %>

<!-- this is jQuery, but you can use any JS framework for this -->
<script>
    $("form").submit(function () {
        $("#hidden_editor").val(editor.getSession().getValue());
    });
</script>

In Ihrem Controller können Sie die Daten jetzt in der Datenbank speichern

[HttpPost]
public ActionResult Index (IndexModel model) {
    var data = model.Editor;
    // save data in database
}

Andere Tipps

Hier ist eine Lösung mit den neuesten Technologien (Razor/MVC/AJAX):

    $(document).ready(function() {
        $("#btnSave").on("click", function () {                
                $.ajax({
                    url: '@Url.Action("YourAction", "YourController")',
                    type: 'POST',
                    data: { id: @Model.ID,
                            html: ace.edit("editor").getValue() },
                    cache: false,
                    success: function (response) {
                        alert("Changes saved.");
                    }                        
                });
        });
    });

In Controller:

    [AjaxAuthorize]
    [HttpPost, ValidateInput(false)]
    public ActionResult YourAction(string id, string html)
    {
        if (id == null || String.IsNullOrEmpty(id))
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        // do you stuff
    }

So habe ich es in Rasiereransichten gemacht

@model OfficeGx.Cms.Model.ClassName
<div class="form-group row">
    <div class="col-lg-11">
        @Html.HiddenFor(x => x.CascadingStylesHdn, new { @id = "hidden_cssEditor" })
        @Html.LabelFor(x=>x.CascadingStyles)
        <div id="cssEditor">@Model.CascadingStyles</div>
    </div>
</div>
<div class="form-group row">
    <div class="col-lg-11">
        @Html.HiddenFor(x => x.JavaScriptHdn, new { @id = "hidden_jsEditor" })
        @Html.LabelFor(x => x.JavaScript)
        <div id="jsEditor">@Model.JavaScript</div>
    </div>
</div>
<script>
    var cssEditor;
    var jsEditor;
    window.onload = function() {
        cssEditor = ace.edit("cssEditor");
        cssEditor.getSession().setMode("ace/mode/css");
        cssEditor.setTheme("ace/theme/twilight");

        jsEditor = ace.edit("jsEditor");
        jsEditor.getSession().setMode("ace/mode/javascript");
        jsEditor.setTheme("ace/theme/xcode");
    };
    $("form").submit(function () {
        $("#hidden_cssEditor").val(window.cssEditor.getSession().getValue());
        $("#hidden_jsEditor").val(window.jsEditor.getSession().getValue());
    });
</script>
<style>
    #cssEditor, #jsEditor {
        position: relative;
        height: 400px
    }

    @Model.CascadingStyles
</style>

In meiner Controller -Methode hinzufügen/bearbeiten

[HttpPost]
        [ValidateInput(false)]
        public ActionResult AddEdit(Article article, FormCollection formCollection)
        {
            article.CompanyId = OperatingUser.CompanyId;
            article.CascadingStyles = article.CascadingStylesHdn;
            article.JavaScript = article.JavaScriptHdn;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top