Как обновить частичное представление в проекте .net-core mvc - PullRequest
0 голосов
/ 15 апреля 2019

Я прочитал несколько постов при частичном просмотре, но все еще не могу понять, как это работает.У меня есть главная страница, внутри которой, если у меня есть частичное представление, в основном, рендеринг изображения.

Я «слушаю» папку, используя FileSystemWatcher, когда в нее приходит новое изображение, в зависимости от его типа, оно делает некоторыепроцесс и в конце процесса он должен «обновить» частичное представление.

в основном cshtml «fullPage.cshtml» Я сделал это:

<div id="_PartialView">
    <h2><b>Images:</b></h2>
    @Html.Partial("PatialViewImage");
</div>

в PartialViewImage.cshtml:

<div style="text-align:center">
    <img id="img_logo" alt="AIExampleResult" src=@ViewBag.CurrentImage style="margin-left:auto;margin-right:auto;width:80%" />
   <h3>ImageProperties: @ViewBag.Resolution etc ...</h3>
</div>

в контроллере:

public async Task<IActionResult> fullPage(int? id)
{
   if (id == null)
{
   return NotFound();
}

var patientdata = await _context.Patientdata
    .FirstOrDefaultAsync(m => m.IdPatient == id);
if (patientdata == null)
 {
  return NotFound();
 }

//start to listen dragonfly folder
_watcher = new FolderWatcher();
_watcher.PathToWatch = _configuration["ConfigFolderListner:ImagesFolder"];
_watcher.patientdata = patientdata;
_watcher.Run();
_watcher.PropertyChanged += HandleNewJImage;
return View(patientdata);
}

, поэтому при обнаружении нового изображения оно попадает в (в классе контроллера):

public void HandleNewJpeg(object sender, EventArgs e)
{
    ViewBag.CurrentImage = _watcher.LastImageProcessed;
    PartialView("PatialViewImage");
    return;
}

, ноэто ничего не делает.когда я отлаживаю: он останавливается на строке PartialView («PartialViewImage»), но, похоже, он не входит в PartialViewImage.cshtml и fullPage не загружается.

Я пытался добавить в fullPage.cshtmlэтот код JavaScript:

<script language="JavaScript" type="text/javascript">
$("@ViewBag.CurrentImage").change(function refresh)
    function refresh() {
        $("#_PartialView").load("/Views/PatialViewImage");
    };

</script>

без успеха.Любая идея, как я мог бы подключить FileSystemWatcher к моей полной странице?

ОБНОВЛЕНИЕ

на полной странице я добавил это:

$(document).ready(function () {
  CheckNewImages();
  var refreshId = window.setInterval(function () {
    CheckNewImages();
  }, 2000);
});

function CheckNewImages() {
  $.ajax({
  url: "@Url.Action("ReportPartialView")",
  type: "POST",
  dataType: "html",
  data: {id : @Model.IdPatient},
  success: function (data) {
   $('#_ReportPartialView').html(data);
   clearInterval(refreshId);
  },
  fail: function () {
   //do nothing
  }
});

квремя от времени проверяйте, есть ли у меня новое изображение.из события filesystemwatcher я пытаюсь обновить определение базы данных следующим образом: в моделях:

public class PathImages
{
  public int Id { get; set; }

  public string RawImage { get; set; }

  public string IAImage { get; set; }
}

public class TempContext : DbContext
{
 public TempContext(DbContextOptions options) : base(options)
 { }

 public DbSet<PathImages> PathImages { get; set; }
}

в файле startup.cs

services.AddDbContext<SQLDATABASEContext>(options => options.UseMySQL(Configuration.GetConnectionString("SQLDATABASE")));
services.AddDbContext<TempContext>(options => options.UseInMemoryDatabase("name"));

и в контроллере:

public void HandleNewJpeg(object sender, EventArgs e)
{
    _context2.Add<PathImages>(new PathImages { RawImage = _context._watcher.LatestJPEGThumb, IAImage = "" });
    return;
}

но я получаю эту ошибку:

System.ObjectDisposedExceptionHResult Невозможно получить доступ к удаленному объекту

Я все еще не понимаю, как передать данные из public void HandleNewJpeg(object sender, EventArgs e) к действию контроллера.

1 Ответ

0 голосов
/ 15 апреля 2019

Вы можете использовать <partial> tag helper, <div id="imageChanged"> <partial name="Partial/PatialViewImage" model="new ViewModel() { ImSrc = Model.ImSrc}" /> </div>. Если вы хотите обновить страницу, вам нужно иметь действие контроллера, которое будет возвращать частичное представление.

Пользовательский JQuery с событием или без события, например

 (function () {
    $.ajax({
            url: ROOT + 'Home/GetImage',
            data: { imgId : @Model.ImgId },
            type: 'POST',
            success: function (data) {
                     $('#imageChanged').html(data);
                    },
                    error: function (res) {
                    }})
    })();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...