【发布时间】:2020-03-09 20:51:16
【问题描述】:
我有一个视图组件,EventsViewComponent,它使用以下代码行加载到我的事件视图 index.cshtml 中:
<div id="events">
@await Component.InvokeAsync("Events", new { showPrevious = Model.ShowPrevious, showUpcoming = Model.ShowUpcoming })
</div>
我添加了两个这样的复选框:
@Html.CheckBoxFor(m => m.ShowPrevious, new { id = "cbShowPrevious", onchange = "ReloadEvents()" })
@Html.CheckBoxFor(m => m.ShowUpcoming, new { id = "cbShowUpcoming", onchange = "ReloadEvents()" })
ReloadEvents() 指的是一个 Javascript 函数,我希望在其中使用 Ajax 调用来刷新 EventsViewComponent,如下所示:
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
}
但我似乎无法从 EventsViewComponent 获取 HTML。
我已经为 EventsViewComponent 编写了 Default.cshtml,如下所示:
@{
List<Event> events = ViewData["Events"] as List<Event>;
if (events.Count > 0)
{
<table>
//event data from the model
</table>
}
}
EventsViewComponent 中的 InvokeAsync 方法被命中,EventsController 中的 ReloadEvents 方法也是如此,但我显然误解了一些东西,因为我似乎无法更新 EventsViewComponent。
请有人建议这是否可能以及如何实现它?
【问题讨论】:
标签: javascript asp.net-mvc asp.net-core asp.net-core-viewcomponent