I have the following code. I'd like to do away with ContactIdsString, but I don't then know how to send the int[] in JavaScript to an IEnumerable in C#. Is there any way?
Html:
@model MyNamespace.Models.MassMailViewModel
@section scripts
{
@Scripts.Render("~/bundles/mass-mail")
<script>
var contactIdsName = '@nameof(MassMailViewModel.ContactIdsString)'
</script>
}
@using (Html.BeginForm(nameof(MassMailController.SendMail), "MassMail", FormMethod.Post, new { id = "massMailForm" }))
{
@(Html.Kendo().Button()
.Name("massMailButton")
.Content("Send")
.HtmlAttributes(new { type = "submit" })
)
@Html.HiddenFor(m => m.ContactIdsString)
...bunch of code for contact-mass-mail-grid...
}
JavaScript:
window.jQuery(function () {
window.jQuery("#massMailForm").submit(function () {
var ids = $('#contact-mass-mail-grid').data('kendoGrid').selectedKeyNames();
var idsJson = JSON.stringify(ids);
var hiddenField = $('#' + window.contactIdsName);
hiddenField.val(idsJson);
});
});
View Model:
public class MassMailViewModel
{
public string ContactIdsString { get; set; }//TODO I'd like to not have to do this.
public IEnumerable<int> ContactIds => JsonConvert.DeserializeObject<IEnumerable<int>>(ContactIdsString);
}
Controller:
public ActionResult SendMail(MassMailViewModel vm)
{
...
}