У меня есть действие PartialViewResult, которое отображает PartialView, который я вызываю из вызова $ .ajax на странице.
Этот PartialView также имеет цикл foreach для элементов в виртуальной машине и в этом PartialView, который у меня естьдва RenderAction, которые рендерит два других Partials.
Все работает нормально, за исключением скорости, с которой он рендерится.Когда я закомментирую два вложенных элемента RenderAction, основной частичный вид отображается очень быстро.Когда я раскомментирую их, основной частичный просмотр будет от 3 до 5 секунд.Даже если я удаляю все данные из частичных представлений и все данные из действий, чтобы вернуть только пустое представление, это все равно занимает 3-5 секунд.
Почему-то у моего приложения возникают проблемы с рендерингом этих двух частичек, даже когдаони пустые.
Мой код: Основное действие:
public PartialViewResult MyTasks(int milestoneId, int currentPage = 1)
{
var mergedTasks = new List<MergedTask>();
var TrackingTeams = _TrackingTeams.GetAll().ToList();
var pagingInfo = new PagingInfo() {CurrentPage = currentPage, ItemsPerPage = 10, TotalItems = _TrackingTeams.GetAll().Count() };
mergedTasks.AddRange(from TrackingTeam in TrackingTeams
let task = allTasks.Single(x=>x.TestId == (int)TrackingTeam.TrackingTask.TestId)
select new MergedTask()
{
Summary = TrackingTeam.TrackingTask.Description,
InternalId = task.Id,
DevTrackingTask = TrackingTeam.TrackingTask,
LastUpdate = task.DateModified
});
return PartialView(new DevTrackingTaskViewModel
{
MergedTasks = mergedTasks,
Category = _categories.GetById(categoryId),
PagingInfo = pagingInfo
});
}
Связанная с ним модель представления:
public class TrackingTaskViewModel
{
public List<MergedTask> MergedTasks { get; set; }
public int CountTasks { get; set; }
public PagingInfo PagingInfo { get; set; }
public Category Category { get; set; }
}
public class MergedTask
{
public int InternalId { get; set; }
public string Summary { get; set; }
public TrackingTask TrackingTask { get; set; }
public DateTime LastUpdate { get; set; }
}
Мой основной PartialView:
@foreach (var item in Model.MergedTasks)
{
<script type="text/javascript">
$(document).ready(function () {
$("#TrackingTask@(item.TrackingTask.Id)").hover(function () {
if ($("#snapshotFixerForTrackTask@(item.TrackingTask.Id)").length == 1) {
$("#expandTrackingTaskForTask@(item.TrackingTask.Id)").removeClass("hide");
}
else {
$("#expandTrackingTaskForTask@(item.TrackingTask.Id)").toggleClass("hide");
}
});
});
</script>
<div class="TrackingTaskDiv" id="TrackingTask@(item.TrackingTask.Id)">
<div class="TrackingContainer">
<div id="flagsForTrackingTask@(item.TrackingTask.Id)" class="flags">
@{Html.RenderAction("ShowFlags", "Task", new { trackingid = item.TrackingTask.Id });}
</div>
<div id="TestStatusForTrackTask@(item.TrackingTask.Id)" class="TestStatusWrapper">
@{Html.RenderAction("CheckTrackStatus", "Task", new { trackingid = item.TrackingTask.Id });}
</div>
</div>
<div id="expandTrackingTaskForTask@(item.TrackingTask.Id)" class="expandTrackingTask collapsed hide"></div>
</div>
}
Я могу вставить в действие для «ShowFlags» и «CheckTrackStatus», если это необходимо.Но, как я уже упоминал, даже если я удаляю весь код из действия и представление, для рендеринга все равно требуется 3-5 секунд, нет никакой разницы.
Одним из решений, которое мы придумали, было быполностью удалите частичные компоненты, поместите ВМ каждого частичного элемента в основную ВМ и сделайте то же самое для HTML в частичных элементах.Но мне нравится идея разделения отдельных функций в представлении.