View:
<div>
@for (int i = 0; i < 2; i++)
{
<h2>Instant content</h2>
<p>Delayed content (DbRequest(@i))</p>
}
</div>
Controller:
public string DbRequest(int i)
{
//heavy query
return "result";
}
Смысл в том, чтобы загрузилась страница, а контент с запросами догрузился по ходу.
Upd#1:
View:
@for (int i = 0; i < 10; i++)
{
<h2>Instant content</h2>
<p id="@i"></p>
}
<script>
function RequestString() {
var index = 0;
var request = new XMLHttpRequest();
request.open("GET", "/Home/GetString/?index=" + index);
request.send(index);
request.onreadystatechange = function () {
if (request.status == 200) {
obj = document.getElementById(index);
if (obj != null) {
obj.innerHTML = request.responseText;
} else {
alert("obj is null");
}
}
}
var index2 = 9;
var request2 = new XMLHttpRequest();
request2.open("GET", "/Home/GetString/?index=" + index2);
request2.send();
request2.onreadystatechange = function () {
if (request2.status == 200) {
obj = document.getElementById(index2);
if (obj != null) {
obj.innerHTML = request2.responseText;
} else {
alert("obj is null");
}
}
}
}
document.onreadystatechange = RequestString();
</script>
Controll:
public async Task<string> GetString(int? index)
{
if (index == null) return "null index string";
await Task.Delay(index.Value * 1000);
return index + " string";
}
Осталось решить вопрос с асинхронным циклом в скрипте. for-loop из 10 итераций делает 10 запросов с последним индексом.
View:
@for (int i = 0; i < 10; i++)
{
<h2>Instant content</h2>
<p id="@i"></p>
}
<div>Log</div>
<div id="log"></div>
<script>
function Log(message) {
var logElement = document.getElementById('log');
var firstChildElement = logElement.firstChild;
var newChildElement = document.createElement('p');
newChildElement.innerHTML = "Message: " + message;
if (firstChildElement == null) {
logElement.appendChild(newChildElement);
} else {
logElement.insertBefore(newChildElement, firstChildElement);
}
}
function Request(index) {
var request = new XMLHttpRequest();
request.open("GET", "/Home/GetString/?index=" + index);
request.send();
request.onreadystatechange = function () {
if (request.status == 200) {
obj = document.getElementById(index);
if (obj != null) {
obj.innerHTML = request.responseText;
} else {
Log("obj " + index + " is null");
}
} else {
Log("Bad request");
}
}
}
function RequestStrings() {
for (var i = 0; i < 10; i++) {
Request(i);
}
}
document.onreadystatechange = RequestStrings();
</script>
Controller:
private readonly Random rnd = new Random();
public async Task<string> GetString(int? index)
{
if (index == null) return "null index string";
await Task.Delay(rnd.Next(1, 12) * 1000);
return index + " string";
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть JQ код, читаю содержимое textarea, и вывожу его в определенный DIVПроблема в том, что в textarea я могу написать тест с переносами строк, и даже в консоль...
Как отправить кроссдоменный запрос на время тестирования приложения на Angular2Это только через сервер делается или на клиенте можно решить?
Есть кнопка поиска который при фокусе плавно увеличивается ширина