2015-06-23 2 views
1

Я использую крошечный mce. Я хочу получить html-элементы из текстовой области крошечного mce. Я пытаюсь сделать tat с вызовом ajax. И у меня есть кнопка PDF, которая будет генерироваться из html PDF. Я это:Как получить значение от tinymce

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); 
} 

и Аякса вызов:

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); 
      } 
     }); 

    } 

метод контроллера даже не называется

+0

вы ничего не отправляете в контроллер .. 'data: {},' это то, что вы отправляете по вашему методу –

+0

Что касается новой вкладки: вы никогда не сможете ее принудительно, так как это настройка локального браузера. Тем не менее, вы можете предложить открыть новую вкладку/окно, и если пользовательские настройки позволят ей это сделать. Взгляните на этот вопрос: http://stackoverflow.com/questions/4907843/open-a-url-in-a-new-tab-using-javascript – JNYRanger

+0

Причина, по которой второй вызов не влияет на ваш метод, заключается в том, что dataType не указывается. Попробуйте добавить dataType: 'json' или см. Ниже ответ. –

ответ

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. Это будет не передать модель pdf, которая была создана в GeneratePDF. Вам придется перестроить свой код, чтобы сделать это, поскольку существующая структура затрудняет достижение требуемой функциональности.

AJAX не предназначен для передачи сложных объектов взад и вперед, аналогичных тем, как контроллеры могут передавать данные в виде типов данных, таких как JSON/HTML/XML, полный документ может быть найден here (перейти к типам данных). При необходимости вы можете сериализовать объект, отправить его, изменить его в бэкэнд, получить его как структуру JSON сложного объекта и собрать объект, однако проще и лучше использовать переоценку того, что вы пытаетесь сделать, и создать надлежащий Архитектура MVC.

+0

спасибо. Я редактирую сообщение – InfinityGoesAround

+0

Oke, но как получить данные о тиниме в нем? – InfinityGoesAround

0

Здесь

data: {}, 

вы должны иметь данные, которые вы намерены передать.

Вместо

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

на стороне сервера, необходимо перенаправить внутри success функции, изменяя значение window.location.href.

Смежные вопросы