C# 如何将mxgraph生成的xml传递给控制器的操作?

C# 如何将mxgraph生成的xml传递给控制器的操作?,c#,.net,asp.net-mvc,model-view-controller,mxgraph,C#,.net,Asp.net Mvc,Model View Controller,Mxgraph,我使用asp.NETMVC5启动了一个项目,然后从其原始源github下载了mxGraph项目 我在mvc项目中加载了mxgraph www文件夹和src文件夹,并编辑了Index.cshtml文件,如下所示 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><! [endif]--> <!DOCTYPE html> <h

我使用asp.NETMVC5启动了一个项目,然后从其原始源github下载了mxGraph项目

我在mvc项目中加载了mxgraph www文件夹和src文件夹,并编辑了Index.cshtml文件,如下所示


    <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><! 
    [endif]-->
    <!DOCTYPE html>
    <html>
    <head>
        <title>Grapheditor</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
        <link rel="stylesheet" type="text/css" href="/styles/grapheditor.css">
        <script type="text/javascript">
            var urlParams = (function(url)
            {
                var result = new Object();
                var idx = url.lastIndexOf('?');
                if (idx > 0)
                {
                    var params = url.substring(idx + 1).split('&');
                    for (var i = 0; i < params.length; i++)
                    {
                        idx = params[i].indexOf('=');
                        if (idx > 0)
                        {
                            result[params[i].substring(0, idx)] = params[i].substring(idx + 1);
                        }
                    }
                }
                return result;
            })(window.location.href);
            mxLoadResources = false;
        </script>
        <script type="text/javascript" src="/js/Init.js"></script>
        <script type="text/javascript" src="/deflate/pako.min.js"></script>
        <script type="text/javascript" src="/deflate/base64.js"></script>
        <script type="text/javascript" src="/jscolor/jscolor.js"></script>
        <script type="text/javascript" src="/sanitizer/sanitizer.min.js"></script>
        <script type="text/javascript" src="/src/js/mxClient.js"></script>
        <script type="text/javascript" src="/js/EditorUi.js"></script>
        <script type="text/javascript" src="/js/Editor.js"></script>
        <script type="text/javascript" src="/js/Sidebar.js"></script>
        <script type="text/javascript" src="/js/Graph.js"></script>
        <script type="text/javascript" src="/js/Format.js"></script>
        <script type="text/javascript" src="/js/Shapes.js"></script>
        <script type="text/javascript" src="/js/Actions.js"></script>
        <script type="text/javascript" src="/js/Menus.js"></script>
        <script type="text/javascript" src="/js/Toolbar.js"></script>
        <script type="text/javascript" src="/js/Dialogs.js"></script>
    </head>
        <body class="geEditor">
            <script type="text/javascript">

            (function() {
                var editorUiInit = EditorUi.prototype.init;
                EditorUi.prototype.init = function() {
                    editorUiInit.apply(this, arguments);
                    this.actions.get('export').setEnabled(false);
                    if (!Editor.useLocalStorage)
                    {
                        mxUtils.post(OPEN_URL, '', mxUtils.bind(this, function(req) {
                            var enabled = req.getStatus() != 404;
                            this.actions.get('open').setEnabled(enabled || Graph.fileSupport);
                            this.actions.get('import').setEnabled(enabled || Graph.fileSupport);
                            this.actions.get('save').setEnabled(enabled);
                            this.actions.get('saveAs').setEnabled(enabled);
                            this.actions.get('export').setEnabled(enabled);
                        }));
                    }
                };
                mxResources.loadDefaultBundle = false;
                var bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) || mxResources.getSpecialBundle(RESOURCE_BASE, mxLanguage);

                mxUtils.getAll([bundle, /*STYLE_PATH +*/ '/styles/default.xml'], function(xhr) {
                    mxResources.parse(xhr[0].getText());
                    var themes = new Object();
                    themes[Graph.prototype.defaultThemeName] = xhr[1].getDocumentElement();

                    new EditorUi(new Editor(urlParams['chrome'] == '0', themes));
                }, function() {
                    document.body.innerHTML = '<center style="margin-top:10%;">Error loading resource files. Please check browser console.</center>';
                });
            })();
        </script>
    </body>
    </html>


现在,我想在绘制图表后将生成的xml传递给我的操作,然后单击File/Save

谢谢你的回复。我找到了解决办法

@{
    Layout = null;
}
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><![endif]-->
<!DOCTYPE html>
<html>
<head>
    <!--head is as past and jquery added-->
    //previous repeated code collapsed for brevity 

    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
</head>
<body class="geEditor">
    <script type="text/javascript">
        // Extends EditorUi to update I/O action states based on availability of backend
        (function () {
            var editorUiInit = EditorUi.prototype.init;

            EditorUi.prototype.init = function () {
                editorUiInit.apply(this, arguments);
                this.actions.get('export').setEnabled(false);

                //previous repeated code collapsed for brevity 

                this.editor.setFilename('doc1.xml');

                //save editorUi object
                var editorUI = this;

                //this part shal be inserted
                //override EditorUi.saveFile function for customization
                this.save = saveXml;
                function saveXml() {

                    if (editorUI.editor.graph.isEditing()) {
                        editorUI.editor.graph.stopEditing();
                    }

                    var xml = mxUtils.getXml(editorUI.editor.getGraphXml());
                    //xml = encodeURIComponent(xml);

                    if (xml.length < MAX_REQUEST_SIZE) {
                        $.ajax({
                            type: "POST",
                            url: "home/save",
                            processData: false,
                            contentType: "application/json; charset=utf-8",
                            data: JSON.stringify({ 'xml': xml }),
                            success: function (response) {
                                //alert(response.message);
                            },
                            error: function (ex) {
                                alert(ex.message);
                            }
                        });
                    }
                    else {
                        mxUtils.alert(mxResources.get('drawingTooLarge'));
                        mxUtils.popup(xml);

                        return;
                    }

                };

                //reset onload open function                               
                this.open = defaultOpen;
                function defaultOpen() {};

            };

        })();
    </script>
</body>
</html>
@{
布局=空;
}
//为简洁起见,先前重复的代码被折叠
//扩展EditorUi以根据后端的可用性更新I/O操作状态
(功能(){
var editorUiInit=EditorUi.prototype.init;
EditorUi.prototype.init=函数(){
apply(这个,参数);
this.actions.get('export').setEnabled(false);
//为简洁起见,先前重复的代码被折叠
setFilename('doc1.xml');
//保存editorUi对象
var editorUI=this;
//这一部分应插入
//覆盖用于自定义的EditorUi.saveFile函数
this.save=saveXml;
函数saveXml(){
if(editorUI.editor.graph.isEditing()){
editorUI.editor.graph.stopEditing();
}
var xml=mxUtils.getXml(editorUI.editor.getGraphXml());
//xml=encodeURIComponent(xml);
if(xml.length<最大请求大小){
$.ajax({
类型:“POST”,
url:“主页/保存”,
processData:false,
contentType:“应用程序/json;字符集=utf-8”,
数据:JSON.stringify({'xml':xml}),
成功:功能(响应){
//警报(response.message);
},
错误:函数(ex){
警报(例如消息);
}
});
}
否则{
alert(mxResources.get('drawingTooLarge');
mxUtils.popup(xml);
返回;
}
};
//重置加载打开功能
this.open=defaultOpen;
函数defaultOpen(){};
};
})();

Xml是一个字符串,您可以使用c#中的文件方法(如StreamWriter或File.WriteAllText(文件名))简单地使用相同的字符串Xml。在保存之前,不需要解析代码中的xml,除非您需要处理xml或只保存字符串的一部分。你能在这里分享全部代码吗?你应该观察你的浏览器控制台出现的bug,并替换文件夹中的js文件来解决bug。告诉我你的结果,我会帮你得到结果。
@{
    Layout = null;
}
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><![endif]-->
<!DOCTYPE html>
<html>
<head>
    <!--head is as past and jquery added-->
    //previous repeated code collapsed for brevity 

    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
</head>
<body class="geEditor">
    <script type="text/javascript">
        // Extends EditorUi to update I/O action states based on availability of backend
        (function () {
            var editorUiInit = EditorUi.prototype.init;

            EditorUi.prototype.init = function () {
                editorUiInit.apply(this, arguments);
                this.actions.get('export').setEnabled(false);

                //previous repeated code collapsed for brevity 

                this.editor.setFilename('doc1.xml');

                //save editorUi object
                var editorUI = this;

                //this part shal be inserted
                //override EditorUi.saveFile function for customization
                this.save = saveXml;
                function saveXml() {

                    if (editorUI.editor.graph.isEditing()) {
                        editorUI.editor.graph.stopEditing();
                    }

                    var xml = mxUtils.getXml(editorUI.editor.getGraphXml());
                    //xml = encodeURIComponent(xml);

                    if (xml.length < MAX_REQUEST_SIZE) {
                        $.ajax({
                            type: "POST",
                            url: "home/save",
                            processData: false,
                            contentType: "application/json; charset=utf-8",
                            data: JSON.stringify({ 'xml': xml }),
                            success: function (response) {
                                //alert(response.message);
                            },
                            error: function (ex) {
                                alert(ex.message);
                            }
                        });
                    }
                    else {
                        mxUtils.alert(mxResources.get('drawingTooLarge'));
                        mxUtils.popup(xml);

                        return;
                    }

                };

                //reset onload open function                               
                this.open = defaultOpen;
                function defaultOpen() {};

            };

        })();
    </script>
</body>
</html>