Я закончил тем, что перезагрузил их через вызов AJAX, но только один для всех визуализированных представлений.Во-первых, я загружаю ViewComponent с параметром «async», установленным в «true» (он выбирает данные, только когда async установлен в «false»):
public async Task<IViewComponentResult> InvokeAsync(string ftxCode, string objRef = "", List<FTXPara> customPara = null, bool async = false)
{
if (async)
{
ViewData["ftxCode"] = ftxCode;
ViewData["async"] = async;
return View(new GetFreeTextResponse());
}
List<CMailCustomParameter> para = new List<CMailCustomParameter>();
if (customPara != null)
{
foreach (var p in customPara)
{
para.Add(new CMailCustomParameter { ParameterName = p.Name, ParameterValue = p.Value });
}
}
var resp = await GetItemsAsync(ftxCode, objRef, para);
return View(resp);
}
private async Task<GetFreeTextResponse> GetItemsAsync(string ftxCode, string objRef, List<CMailCustomParameter> para)
{
return await FreeTextService.GetFreeText(new GetFreeTextRequest { FTX_Code = ftxCode, ObjRef = objRef, CustomParameters = para });
}
Затем я перебираю все визуализированные «пустые» представленияКомпонент и загрузите View Component с фактическими данными из контроллера (на этот раз «async» ложно »):
$('.view-component').each(function (i, obj) {
var that = this;
var id = $(this).attr('id');
var test = $(this).data();
console.log($(this).data('async'));
if ($(this).data('async')) {
$.ajax({
url: "/VC/Get" + "FreeText" + "ViewComponent",
type: 'POST',
data: $(this).data(),
contentType: 'application/x-www-form-urlencoded',
success: function (data) {
$(that).html(data);
},
error: function (xhr, status, error) {
console.log(xhr.status + " - " + error);
}
});
}
});