【问题标题】:How to get value from tinymce如何从 tinymce 中获取价值
【发布时间】:2015-06-23 12:53:09
【问题描述】:

我正在使用微型 mce。我想从小 mce 的 textarea 中获取 html 元素。我尝试用 ajax 调用来做 tat。我有一个 pdf 按钮,它将从 html 生成一个 PDF。我有这个:

public ActionResult GeneratePDFFOrProductHandler(EditProductModel model, string data)
{
    SubmittedForm sf = new SubmittedForm();
    string schema = requestSchema;
    customer_DbConnection db = new customer_DbConnection();
    RenderFormController renderController = new RenderFormController();
    renderController.GeneratePdf(data, db, sf);
    return RedirectToAction(model.DesignId, "Prdocut/Edit");
    //return View(model);
}

和 ajax 调用:

function GenerateHTMLTOPDF() {        
        $.ajax({
            type: "POST",
            url: '@Url.Action("GeneratePDFFOrProductHandler", "Product")',
            data: {},
            success: function (data) {

                alert(tinyMCE.get('tinymce').getContent());
                alert("data from ajax = " + data.toString()); // data is html               
                $("#tinymce").html(data);        // does not set anything
            },
            error: function (request, status, error) {
                alert(tinyMCE.activeEditor.getContent());

                alert(request.responseText);
            }
        });  

    }

控制器中的方法被调用。但是数据每次都是空的。

谢谢

生成 PDF 的按钮是这样的:

 <button type="submit" value="GeneratePDFFOrProductHandler" id="btnGeneratePDF" onclick="GenerateHTMLTOPDF()" class="btn btn-success"><i class="fa fa-fw fa-check"></i> @Resources.Action.Navigation.GeneratePDF</button>     

但是如何在浏览器的新标签页中生成pdf呢?

谢谢

但如果我试试这个:

 function GenerateHTMLTOPDF() {
        var data = tinyMCE.get('tinymce').getContent();
        $.ajax({
            type: "POST",
            url: '@Url.Action("GeneratePDFFOrProductHandler", "Product")',

            data: {data:data},
            success: function (data) {
                alert('success');                             
                alert("data from ajax = " + data.toString()); // data is html                               
            },
            error: function (request, status, error) {
                alert(tinyMCE.activeEditor.getContent());

                alert(request.responseText);
            }
        });  

    }

甚至没有调用控制器方法

【问题讨论】:

  • 您没有向控制器发送任何内容。data: {}, 这是您发送给您的方法的内容
  • 关于新标签的事情:你永远不能强制这样做,因为它是本地浏览器设置。但是,您可以建议打开一个新选项卡/窗口,如果用户的设置允许它会这样做。看看这个问题:stackoverflow.com/questions/4907843/…
  • 第二次调用未命中您的方法的原因是未指定 dataType。尝试添加 dataType: 'json',或查看下面的答案。

标签: c# jquery asp.net-mvc tinymce-4


【解决方案1】:

发送到您的控制器的数据为空,因为在您的 AJAX 调用中没有发送任何数据。

这一行:

data: {},

应包含您希望返回的数据。

在您的情况下,您可以按如下方式重组您的通话:

function GenerateHTMLTOPDF() {        
        $.ajax({
        var d = $('#tinymce').html( tinymce.get('tinymce').getContent() );

        dataType: 'json',
        type: "POST",
        url: '@Url.Action("GeneratePDFFOrProductHandler", "Product")',
        data: {d},
        success: function (data) {
             window.location.href = data;
        },
        error: function (request, status, error) {
             //Error handling
        }
    });  

}

您也不能通过 AJAX 帖子重定向,这一行:

return RedirectToAction(model.DesignId, "Prdocut/Edit");

将无法按预期运行。

return Json(Url.Action("Prdocut", "Edit"));

上面将返回 JSON 数据以及您可以使用 javascript 导航到的窗口位置。这将传递在 GeneratePDF 中创建的 pdf 模型。您必须重新构建代码才能做到这一点,因为当前的结构很难实现您正在寻找的功能。

AJAX 并不意味着像控制器那样来回传递复杂的对象,它以 JSON/HTML/XML 等数据类型的形式传递数据,完整的文档可以在 here 找到(导航到数据类型)。如有必要,您可以序列化一个对象,发送它,在后端更改它,将其作为复杂对象的 JSON 结构检索并重新组装该对象,但是重新评估您正在尝试做的事情并创建一个合适的做法是更简单和更好的做法MVC 架构。

【讨论】:

  • 好的,但是如何获取tinymce里面的数据呢?
【解决方案2】:

这里

data: {},

你应该有你打算传递的数据。

代替

return RedirectToAction(model.DesignId, "Prdocut/Edit");

在服务器端,您需要通过更改 window.location.href 的值来重定向您的 success 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2018-04-07
    • 2021-12-26
    • 1970-01-01
    • 2016-08-24
    相关资源
    最近更新 更多