1. Is it hard to understand the version numbers of our releases? If yes, what makes them hard to understand them?
2. Would semantic versioning (SemVer) of our releases make it easier to understand our version numbers and what's behind them?
3. If we go with SemVer, we might need to start with version 3000.0.0 as we currently use 2022.x.x. Please share your thoughts about this approach and ideas for what number versioning would work best for you.
Hi!
The ListView is breaking my web application, and I cannot make head or tail of the reason:
Kendo.Mvc.UI.ListView<T>.VerifySettings()
Also, you demos for the ListView are broken and the browser tab crashed after a while.
I need an urgent fix, as this is affecting the live application.
In our UI for ASP.NET Core R3 2020 (2020.3.915) release, the Column menu message of unsticking a column is "null".
This bug will be resolved in our next official release.
In the meantime, as a workaround, manually set the Unstick Column menu message:
.ColumnMenu(c => c.Messages(m => m.Unstick(
"Unstick Column"
)))
<div class="signature-container">
<p>Add a Signature to your existing PDF files.</p>
<!-- Toggle buttons -->
<div class="mb-2">
<label>
<input type="radio" name="signatureOption" value="draw" checked /> Draw Signature
</label>
<label class="ml-3">
<input type="radio" name="signatureOption" value="upload" /> Upload Image
</label>
</div>
<!-- Kendo Signature -->
<div id="drawSignatureWrapper">
<div class="signature-wrapper">
@(Html.Kendo().Signature()
.Name("signature")
.Maximizable(false)
.Color("#4040b7")
.Smooth(true)
.HideLine(true)
)
</div>
<div class="notes">
Add your Signature and Export the PDF File
</div>
</div>
<!-- File upload -->
<div id="uploadWrapper" style="display:none;">
@(Html.Kendo().Upload()
.Name("signatureUpload")
.Async(a => a
.Save("Async_Save", "SigningPdf")
.Remove("Async_Remove", "SigningPdf")
.AutoUpload(false)
)
.Multiple(false)
.HtmlAttributes(new { accept = ".jpg,.jpeg,.png" })
.Validation(val => val.AllowedExtensions(new string[] { ".jpg", ".jpeg", ".png" }))
)
</div>
<div id="bottomtoolbar"></div>
</div>
///
$("#bottomtoolbar").kendoToolBar({
items: [
{
type: "button",
text: "Place Your Signature",
primary: true,
icon: "save",
click: exportToPdf
}
]
});
////
function exportToPdf(e) {
toggleKendoLoader("show");
const option = $("input[name='signatureOption']:checked").val();
if (option === "draw") {
const signature = $("#signature").getKendoSignature();
kendo.drawing.drawDOM(".k-signature-canvas > canvas")
.then(group => kendo.drawing.exportPDF(group))
.done(refreshPdfViewer);
}
else if (option === "upload") {
// ✅ Access file directly from upload input
const fileInput = $("#signatureUpload").closest(".k-upload").find("input[type=file]")[0];
if (!fileInput || !fileInput.files.length) {
toggleKendoLoader("hide");
alert("Please select an image first.");
return;
}
const file = fileInput.files[0];
//console.log("Selected file:", file);
const reader = new FileReader();
reader.onload = function (evt) {
//console.log("Reader loaded:", evt);
const img = new Image();
img.src = evt.target.result;
img.onload = function () {
//console.log("Image loaded:", img);
const canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
kendo.drawing.drawDOM(canvas)
.then(group => kendo.drawing.exportPDF(group))
.done(refreshPdfViewer);
};
};
reader.onerror = err => {
toggleKendoLoader("hide");
console.error("FileReader error:", err);
};
reader.readAsDataURL(file);
}
}
///
public string PreparePdf(string pdfData)
{
byte[] resultingBytes = null;
byte[] finalBytes = null;
PdfFormatProvider provider = new PdfFormatProvider();
byte[] renderedBytes = Convert.FromBase64String(pdfData);
RadFixedDocument document1 = null;
RadFixedDocument document2 = provider.Import(renderedBytes, new TimeSpan(0, 1, 0)); //signature selected
string[] pathPartsArr = new string[] { "wwwroot", "Uploads", "TemporaryFiles", "F7.pdf" };
string filePath = Path.Combine(pathPartsArr);
using (FileStream input = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
document1 = provider.Import(input, new TimeSpan(0, 1, 0));
}
using (MemoryStream ms = new MemoryStream())
{
provider.Export(document1, ms, new TimeSpan(0, 1, 0));
resultingBytes = ms.ToArray();
}
finalBytes = AppendContent(resultingBytes, document2);
string result = Convert.ToBase64String(finalBytes);
return result;
}
private byte[] AppendContent(byte[] resultingBytes, RadFixedDocument document2)
{
RadFixedPage foregroundContentOwner = document2.Pages[0];
MemoryStream ms = new MemoryStream();
byte[] renderedBytes = null;
using (MemoryStream stream = new MemoryStream(resultingBytes))
{
using (PdfFileSource fileSource = new PdfFileSource(stream))
{
using (PdfStreamWriter fileWriter = new PdfStreamWriter(ms, true))
{
foreach (PdfPageSource pageSource in fileSource.Pages)
{
using (PdfPageStreamWriter pageWriter = fileWriter.BeginPage(pageSource.Size, pageSource.Rotation))
{
pageWriter.WriteContent(pageSource);
using (pageWriter.SaveContentPosition())
{
double xCenteringTranslation = (pageSource.Size.Width - foregroundContentOwner.Size.Width) - 320;
double yCenteringTranslation = (pageSource.Size.Height - foregroundContentOwner.Size.Height) - 110;
pageWriter.ContentPosition.Translate(xCenteringTranslation, yCenteringTranslation);
pageWriter.WriteContent(foregroundContentOwner);
}
}
}
}
}
}
renderedBytes = ms.ToArray();
return renderedBytes;
}
Question & help needed :
I have implemented signature model using existing signature modal its working fine.
When i try upload upload a file and then try to patch that sign in pdf its not working. I am not uploading file fully just selecting file and after click on <Place Your Signature> calling exportpdf.
Hi,
I need sample code for Asp.net core MVC Kendo Grid where Parent grid will be there & on any row click of parent grid, child grid will be load on same page.
Parent grid will be hide on that point when child grid will be displayed.
I also want to load a 'Subchild' grid on child grid row click in a popup.
I also want to save/load all grid's state data like column selected, filter, sorting & searching etc as well.
I can't find similar solution on forum. Please share if anyone have similar code example.
Thanks in advance.
I'm looking to use to the QR Code so it can be used on product packaging etc and one of them requirements is for the QR Code to have a set quiet zone around it. I can't find anything specific that allows a value to be set for this so I was wondering whether anyone else had hit the same issue or if they knew what the solution was for this.
Thanks
Hello, I am running into issues with my kendo wizard and within one step of the kendo wizard I want to add in a dropdown right next to my kendo textbox so it looks like this where the dropdown is right next to the textbox I added above the combo box. I tried using the
s.Add<ReferralModelLite>()
.Title("Clinic Selection")
.Form(f => f
.Validatable(v => v.ValidateOnBlur(true))
.Layout("grid")
.Grid(g => g.Cols(3).Gutter(12))
.FormData(Model)
.Items(items =>
{
// Add Kendo TextBox above the ComboBox
items.Add().Field("ClinicSearchText")
.Label(l => l.Text("Search for Nearby Facilities by Address:"))
.ColSpan(2)
.Editor(e => e.TextBox()
.Placeholder("Type to search clinics by address...")
.HtmlAttributes(new { @class = "input-wide", @style = "width: 100%;" })
);
items.Add().Field(m => m.ClinicReferralId)
.Label(l => l.Text("Select Clinic:"))
.ColSpan(2) // Not full width, adjust as needed
.Editor(e => e.ComboBox()
.Placeholder("Select or type a clinic...")
.DataTextField("Text")
.DataValueField("Value")
.Filter("contains")
.Suggest(true)
.DataSource(ds => ds.Read("GetClinicsSelectItems", "Clinic"))
.HtmlAttributes(new { @style = "width: 100%;" })
);
@(Html.Kendo().Wizard()
.Name("intake-referral-wizard")
.Steps(steps =>
{
steps.Add().Title("Clinic Selection").Content(@<text>
<div style="display: flex; align-items: center; gap: 8px;">
@(Html.Kendo().TextBox()
.Name("ClinicSearchText")
.Placeholder("Type to search clinics by address...")
.HtmlAttributes(new { @class = "input-wide", style = "width: 250px;" })
)
@(Html.Kendo().DropDownList()
.Name("ClinicSearchCount")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new[] {
new { Text = "5", Value = "5" },
new { Text = "10", Value = "10" },
new { Text = "20", Value = "20" },
new { Text = "50", Value = "50" },
new { Text = "100", Value = "100" }
})
.Value("10")
.HtmlAttributes(new { style = "width: 80px;" })
)
</div>
<!-- Add any other controls or markup for this step below -->
</text>);
// Add more steps as needed...
})
)
items.Add().Field("ClinicSearchText") .Label(l => l.Text("Search for Nearby Facilities by Address:")) .ColSpan(2) .EditorTemplate("ClinicSearchWithCount");
Hello, I am attempting to use your kendo captcha component for my web project when I ran into some technical difficulties related to using the kendo captcha in conjunction to a kendo wizard. I'm trying to run this captcha component as part of a step in a kendo wizard. After adding in my component with the necessary endpoints and functions into my kendo wizard, I get a blank screen with no errors or any endpoints being hit. I know the endpoints work for the captcha component because I'm using the baseline example on the kendo documentation for the Captcha overview into the very first step of my kendo wizard, and my kendo wizard loaded up just fine before adding in the captcha component. I assured the captcha component works just fine on a blank index page, so I'm suspecting the kendo wizard might be at fault but I would like some assistance in confirming that theory.
Can someone me an example of the kendo captcha being utilized in a kendo wizard for ASP.NET Core?
Hello, I am attempting to use your kendo captcha component for my web project when I ran into some technical difficulties invoking your API handler methods for the captcha component. I followed the instructions on the basic level from this url to help me use this component and even after copying exactly what's given here as a proof of concept I'm still getting errors related to my project not recognizing the Captcha api methods. I keep getting errors tat GetCaptcha() or GetCaptchaText() doesn't exist in the current context.
Originally I was attempting to use a captcha component as part of my Kendo Wizard before the user goes onto the next steps of the wizard, but ran into issues having it work with the wizard(which works fine so I know I'm successfully pulling from Kendo.UI's nuget package from what I'm seeing. Can you give me any insights as to what could be wrong or even better a fresh example case using Kendo ASP.NET core's captcha component embedded with a kendo wizard stepper.
// the template reference
.ClientDetailTemplateId("template-controls")
//the child grid definition, variable interpolation in the grid name and the toolbar, both work
<script id="template-controls" type="text/x-kendo-template">
@(Html.Kendo().Grid<ChildItem>()
.Name("GroupGrid_#=GroupID#")
.ToolBar(toolbar =>
{
toolbar.Template(
"<div class='edit-toolbar'>"
+"<button onclick='editChild(" + Model.ID + ",0,#=GroupID#, this)'>Edit</button>"
+ "</div>"
);
})
)
</script>
But when this code is migrated to ASP.NET Core using Tag Helpers, the variable interpolation in the toolbar does not occur. I would like to know whether this is an error in my code or a feature that is no longer supported.
//the template reference
<grid-detail-template>
<kendo-grid name="GroupGrid_${data.GroupID}">
<toolbar client-template-id="GroupGrid_Toolbar"></toolbar>
</kendo-grid>
</grid-detail-template>
//the child grid definition, variable interpolation works in the grid name , but the interpolation in toolbar do not
<script id="GroupGrid_Toolbar" type="text/html">
<div class='edit-toolbar'>
<button onclick=' editChild(@Model.ID,0,#=GroupID#, this)'>Edit</button>
</div>
</script>
with (data) {
$kendoOutput = '\n\n <div class=\'edit-toolbar\'>\n <button onclick=\'editChild(11941,0,' + (GroupID) + ', this)\' \n >\n ' + ($kendoHtmlEncode(data.GroupID)) + ' : ' + (GroupID) + ' Edit #\n </button>\n </div>\n ';
}
<toolbar>
<toolbar-button>
<toolbar-command-template>
// the variable interpolation placed here
</toolbar-command-template>
</toolbar-button>
</toolbar>