Я прочитал несколько постов при частичном просмотре, но все еще не могу понять, как это работает.У меня есть главная страница, внутри которой, если у меня есть частичное представление, в основном, рендеринг изображения.
Я «слушаю» папку, используя 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)
к действию контроллера.