Я пытаюсь обновить / перезагрузить View View в Dotnet Core Razor Page SPA.
На моей главной странице я успешно визуализирую ViewComponent, используя:
<div class="row>">
<button class="btn btn-primary" id="myButton">refresh</button>
<div id="timeDisplays" class="row">
@await Component.InvokeAsync("DateTimeDisplay", @DateTime.Now.ToShortDateString());
</div>
</div>
Но когдаЯ поместил его в функцию, например, так:
<script src="~/lib/jquery/dist/jquery.js" type="text/javascript"></script>
<script>
$("myButton").on("click",
$(function()
{
$("#timeDisplays").load(@await Component.InvokeAsync("DateTimeDisplay", @DateTime.Now.ToShortDateString()));
console.log("Reloaded");
}));
</script>
DateTimeDisplayComponent.cs
[ViewComponent(Name = "DateTimeDisplay")]
public class DateTimeDisplayViewComponent : ViewComponent
{
public DateTimeDisplayViewComponent()
{
}
public async Task<IViewComponentResult> InvokeAsync(DateTime date)
{
return View("DateTimeStringDisplay", DateTime.Now.ToShortDateString());
}
}
, как FYI, вот частичное представление
@model string
<div class="container">
<div class="row">
<div class="col-6 text-right">
<label> Current Time is</label>
</div>
<div class="col-6 text-left">
<p id="timeDisplay">@Model</p>
</div>
</div>
</div>
, когдастраница загружена, прежде чем я когда-либо нажму на кнопку, это выглядит так:
<script>
$("#myButton").on("click",
function()
{
$("#timeDisplays").load(" <div class="container">
<div class="row">
<div class="col-6 text-right">
<label> Current Time is</label>
</div>
<div class="col-6 text-left">
<p id="timeDisplay">5/13/2019</p>
</div>
</div>
</div>
");
console.log("Reloaded");
});
</script>
Я могу отчасти сказать, что происходит.Invokeasync возвращает html, но кажется, что jquery пытается выполнить рендеринг в блоке кода.Это одна часть, которую я не понимаю, почему она выполняет функцию (рендеринг html для ViewComponent), когда страница загружается.Разве это не должно ждать, пока я не нажму кнопку?
Я думал о том, чтобы преобразовать View в HTML-строку, которую, я надеюсь, браузер сможет интерпретировать (и я проверил, работает, когда я заменяю вызов invokeasync простым <p> Hello There<p>