I have a view component, EventsViewComponent, which is loaded in my Events view index.cshtml using the following lines of code:
<div id="events"> @await Component.InvokeAsync("Events", new { showPrevious = Model.ShowPrevious, showUpcoming = Model.ShowUpcoming }) </div> I have two checkboxes added like this:
@Html.CheckBoxFor(m => m.ShowPrevious, new { id = "cbShowPrevious", onchange = "ReloadEvents()" }) @Html.CheckBoxFor(m => m.ShowUpcoming, new { id = "cbShowUpcoming", onchange = "ReloadEvents()" }) ReloadEvents() refers to a Javascript function in which I was hoping to refresh the EventsViewComponent with an Ajax call something like:
function ReloadEvents() { $.ajax({ url: '@Url.Action("ReloadEvents", "Events")', data: { showPrevious: document.getElementById("cbShowPrevious").checked, showUpcoming: document.getElementById("cbShowUpcoming").checked }, success: DoThis() }) } function DoThis() { const eventsDiv = document.getElementById('events'); eventsDic.innerHTML = //HTML from EventsViewComponent } But I don't seem to be able to get the HTML from the EventsViewComponent.
I have written the Default.cshtml for EventsViewComponent like this:
@{ List<Event> events = ViewData["Events"] as List<Event>; if (events.Count > 0) { <table> //event data from the model </table> } } The InvokeAsync method in EventsViewComponent is being hit, as is the ReloadEvents method in EventsController but I'm obviously misunderstanding something as I don't seem to be able to update the EventsViewComponent.
Please could someone advise if this is possible and how to go about achieveing it?
