У меня есть элемент div в моем представлении, называемый «divStatus», который я хочу обновить от контроллера. Я хочу, чтобы я добавлял информацию в существующий контент в div, поэтому от контроллера я делаю:Ввод javascript для просмотра
[HttpPost]
public ActionResult PerformDiagnostic(TestsModel model)
{
var script = "$('#divStatus').append('hello World!');";
return JavaScript(script);
}
Хорошо, это работает отлично, но он не работает, когда я хочу сделать что-то более сложное, например, представьте ниже случай:
[HttpPost]
public ActionResult PerformDiagnostic(TestsModel model)
{
var script = string.Empty;
for (int i = 0; i < 10; i++)
{
script = "$('#divStatus').append('" + "<h1>hello World" + i.ToString() + "!</h1>');";
}
return JavaScript(script);
}
очевидно, после его выполнения, строка «привет World9!» добавляется в элемент управления divStatus, потому что последний выполняется, поэтому при возврате с помощью JavaScript (скрипт) он выводит на экран последнюю выполненную команду. Но что произойдет, если я хочу напечатать строки, созданные в каждом цикле? например, он хочет получить следующее:
hello World0!
привет мир1!
привет мир2!
привет мир3!
привет мир4!
привет мир5!
привет мир6!
привет мир7!
привет мир8!
привет мир9!
Я потратил много дней, пытаясь это сделать, и это кошмар, может ли кто-нибудь сказать мне, как получить эту ситуацию? Я высоко ценю. Я попытался каким-то образом сделать что-то подобное возврату, но я понятия не имею, как сказать мнению: «Эй, вы должны обновить div-контроль с помощью новой информации!»
Также я попытался использовать средство signalr framework для этого, и я частично прочитал его учебник, но я не понимаю, я думаю, что нет простого и небольшого примера, показывающего, как обновить элемент управления, например в моем случае, div, от контроллера. Кроме того, если кто-то специалист в signalr может предоставить мне очень простой пример, сделанный в signalr, я также высоко ценю.
Я использую ASP.NET MVC 4 бритву
Это мой реальный случай:
Контроллер:
public bool DoPing(string hostNameOrAddress)
{
bool connectionOk = false;
try
{
System.Net.NetworkInformation.Ping pinger = new System.Net.NetworkInformation.Ping();
connectionOk = pinger.Send(hostNameOrAddress).Status == System.Net.NetworkInformation.IPStatus.Success;
}
catch (Exception ex)
{
connectionOk = false;
}
return connectionOk;
}
[HttpPost]
public ActionResult PerformWTGTests(TestsModel model)
{
bool result = false;
using (ConfigContext context = new ConfigContext())
{
List<Machine> mCollection = context.Machines.Where(m => m.TypeId == 1).ToList();
foreach (Machine machine in mCollection)
{
result = this.DoPing(machine.IP);
string res = result ? "PASSED" : "FAILED";
Debug.WriteLine(String.Format("IP: {0} - Result: {1}", machine.IP, res, CultureInfo.InvariantCulture));
// After I obtain the result for each machine I want to update the control in view, in my case a div, saying if it is passed or failed, so I need to do this at each loop for each machine.
// Below I have tried to update control in view using it but no works
ViewBag.JS = "updateProgressWindow('" + machine.IP + "','" + res + "');";
}
}
if (result)
{
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
else
{
return new HttpStatusCodeResult(HttpStatusCode.NotFound);
}
}
ОК, но ваше решение подходит для этого случая, я имею в виду, чтобы разрешить простой случай, как это, но представьте себе в контроллере. Я делаю более сложные вещи , подобно базе данных запросов с использованием структуры сущностей, и в этом случае будет нецелесообразно делать, как вы говорите. Anway для простых вещей, чтобы делать то, что вы говорите, абсолютно правильно. – user1624552
Без каких-либо подробностей о том, в каких сложных случаях ваш контроллер пытается справиться, я не смогу вам помочь. Рад, что это вам помогло. Пожалуйста, подумайте о принятии моего ответа. – rexcfnghk
См. Мое сообщение обновлено. Как видите, у меня есть коллекция машин. Я хочу проверить, жив ли каждый из них, пинговая к нему и для каждой машины, затем я хочу обновить элемент управления div в представлении, чтобы проинформировать пользователя о ходе и сообщить для каждой машины, если он прошел или провалился при попытке выполните пинг. Как вы можете видеть, это более сложная ситуация, когда использование вашего подхода было бы очень сложным и не подходящим. Я абсолютно уверен, что я не единственный, у кого такая ситуация, которая хочет обновить ui от контроллера. – user1624552