如何将大字符串从JavaScript发送到Asp Net Core

时间:2019-03-07 14:22:19

标签: javascript c# asp.net-core

我正在尝试使用wkhtmltopdf用HTML代码制作PDF。在C#中,我使用Process执行所有操作。我需要通过JavaScript从HTML页面上获取某些<div>,并将所有这些内容发送到我的Asp。当前正在尝试将此字符串作为参数传递给URL,但是它太长了。是否还有其他方法可以使用JS获取较大的HTML字符串,并将其发送到.NET Core,并从其内容PDF中提取出来?

function getDBData(src)
{
    let script = document.createElement("SCRIPT");
    script.src = backend + src;
    document.getElementsByTagName("head")[0].appendChild(script);
}

function tableToPdf()
{
    // Add in htmlContent heade
    let htmlContent = "<head><link rel=\"stylesheet\" href=\"table- 
                       style.css\" media=\"all\"/></head>";

     // Get all tables 
     let tables = document.querySelectorAll("#tableWrapper .col-lg-12");

     for(let i = 0; i < tables.length; i++)
     {
         // Get header of table
         let tableHeader = tables[i].querySelector(".tableHeader").outerHTML;

        // Get table content
        let tableContent = tables[i].querySelectorAll(".wrapper-table-section-library")[1].outerHTML;

        htmlContent += tableHeader 
        htmlContent += tableContent;
      }

    // Get width ant height of tableWrapper
    let height = document.querySelector("#tableWrapper").offsetHeight;
    let width = document.querySelector("#tableWrapper").offsetWidth;

    getDBData("getTablePdf?width=" + width + "&height=" + height +"&htmlContent=" + htmlContent + "&outputFileName=tables");        
}

2 个答案:

答案 0 :(得分:0)

让我们假设您已经有一个大字符串:

var largeString = '...';

将数据从脚本发送到后端的一种方法是执行AJAX POST请求:

$.ajax({
    url: '/Sample/PrintDocument',
    type: 'POST',
    data: JSON.stringify({
        dataToPrint: largeString
    }),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
})
.done(function(result) {
    // ... do something after the request was processed
});

现在,如果您希望在用户单击“打印”按钮时发送此请求:

$('body').on('click', '#printButton', function (){
    // Do the POST request
    $.ajax({
        ...
});

然后在您的控制器中,您将得到以下内容:

public class SampleController : Controller
{
    ...
    [HttpPost]
    public async Task<JsonResult> PrintDocument([FromBody] string dataToPrint)
    {
        ...
    }
}

答案 1 :(得分:0)

如果您使用Blazor Server端,则SignalR的有效负载大小会被忽略。默认大小为32kb。您可以更改它,但这不是一个好习惯。例如,您可以将字符串拆分为数组子字符串或上传文件。