MVC: Merging Templates in a Controller HttpPost Method
The reporting engine MailMerge is used to merge templates with data. In combination with the HTML5 based MVC editor Web.TextControl, the created template can be merged in the MVC controller and loaded back into the view. The following HttpPost method Merge accepts the model DocumentViewModel which contains the template encoded as a Base64 string. The data source is loaded into a new DataSet object. Finally, the template is loaded into a new instance of the MailMerge class and merged with the…

The reporting engine MailMerge is used to merge templates with data. In combination with the HTML5 based MVC editor Web.TextControl, the created template can be merged in the MVC controller and loaded back into the view.
The following HttpPost method Merge accepts the model DocumentViewModel which contains the template encoded as a Base64 string. The data source is loaded into a new DataSet object. Finally, the template is loaded into a new instance of the MailMerge class and merged with the loaded DataSet. The created document is returned to the view.
[HttpPost]
public string Merge(DocumentViewModel model)
{
// convert the template to a byte array
byte[] document =
Convert.FromBase64String(model.BinaryDocument);
// load the the data source
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("/App_Data/data/sample_db.xml"),
XmlReadMode.Auto);
byte[] sDocument;
// create a new ServerTextControl and MailMerge component
using (TXTextControl.ServerTextControl tx =
new TXTextControl.ServerTextControl())
{
MailMerge mm = new MailMerge();
mm.TextComponent = tx;
// load the template and merge
mm.LoadTemplateFromMemory(document,
FileFormat.InternalUnicodeFormat);
mm.Merge(ds.Tables[0], true);
// save the document
mm.SaveDocumentToMemory(out sDocument,
TXTextControl.BinaryStreamType.InternalUnicodeFormat, null);
}
// encode and return the merged document
return Convert.ToBase64String(sDocument);
}
The contoller method is called from the Javascript function Merge. The current document is saved into a Base64 encoded string and is being sent using AJAX to the controller method Merge.
When the controller method returns successfully, the merged document is loaded into the editor.
function Merge() {
// save the document
TXTextControl.saveDocument(
TXTextControl.streamType.InternalUnicodeFormat,
function (e) {
var serviceURL = "/Home/Merge";
// call the controller
$.ajax({
type: "POST",
url: serviceURL,
contentType: 'application/json',
data: JSON.stringify({
BinaryDocument: e.data
}),
success: successFunc,
error: errorFunc
});
// the controller sends back the merged document
// that is loaded into the editor
function successFunc(data, status) {
TXTextControl.loadDocument(
TXTextControl.streamType.InternalUnicodeFormat, data);
alert("Document has been merged successfully.");
}
function errorFunc() {
alert('Error');
}
});
}
Download the sample from GitHub and test it on your own.
Download and Fork This Sample on GitHub
We proudly host our sample code on github.com/TextControl.
Please fork and contribute.
Requirements for this sample
- Visual Studio 2012 or better
- TX Text Control .NET Server (trial sufficient)
Related Posts
MVC: Adding an Electronic Signature to Documents in Web.TextControl
An electronic signature is in many processes legally sufficient to prove an identity. According to the U.S. Federal ESIGN Act passed in 2000, an electronic signature is an: Electronic sound,…
MVC: Loading a Data Source from a View Model
The most typical application for the Web.TextControl is the creation of templates for the Text Control Reporting engine DocumentServer.MailMerge. The ribbon tab Reports is designed to insert merge…
MailMerge Class Settings Explained
This article explains the different settings of the MailMerge class and how and when they should be used.
MailMerge: Conditional Table Cell Colors using Filter Instructions
The MailMerge class provides an extensible framework to inject custom logic to the merge process. This sample shows how to implement conditional table cell colors.
MailMerge: Using Filters to Remove Unwanted Rows
Data in merge blocks can be filtered and sorted. This article explains how to use filters to remove unwanted lines.