C# 如何在razor页面中显示文件夹中上传的图像

C# 如何在razor页面中显示文件夹中上传的图像,c#,asp.net-core,file-upload,razor-pages,C#,Asp.net Core,File Upload,Razor Pages,我有一个文件夹,其中存储具有指定前缀的不同类型的附件。 例如,图像附件将具有“IM-”前缀,文档附件将具有“DOC”前缀。 我需要的是我想显示的图像附件只在查看页面。 如何在OnGet方法中获取ImageFileName。这是我的密码 Biodata.cshtml.cs //--------------------Image Upload ---------------// [BindProperty] public IFormFile StaffPhoto { get; set

我有一个文件夹,其中存储具有指定前缀的不同类型的附件。 例如,图像附件将具有“IM-”前缀,文档附件将具有“DOC”前缀。 我需要的是我想显示的图像附件只在查看页面。 如何在OnGet方法中获取ImageFileName。这是我的密码

Biodata.cshtml.cs

//--------------------Image Upload ---------------//
    [BindProperty]
    public IFormFile StaffPhoto { get; set; }

    public string ImageName { get; set; }
    public async Task OnGetAsync(int? StaffID)
    {
        StaffGender = new SelectList(_context.Gender, "StaffGender", "StaffGender");
        StaffReligion = new SelectList(_context.Religion, "StaffReligion", "StaffReligion");            
        StaffBioData = await _context.StaffBioData.FirstOrDefaultAsync(m => m.StaffID == StaffID);
        DirectoryInfo di = new DirectoryInfo(Path.Combine(_env.WebRootPath, "Documents/OnBoardingAttachments", StaffBioData.EmpID.ToString()));
        
    }

    public async Task<IActionResult> OnPostUpdateBioDataAsync(StaffBioData StaffBioData)
    {
        StaffGender = new SelectList(_context.Gender, "StaffGender", "StaffGender");
        StaffReligion = new SelectList(_context.Religion, "StaffReligion", "StaffReligion");
        
        if (!ModelState.IsValid)
        {
            return Page();
        }
        else
        {
            var biodata = from u in _context.StaffBioData select u;
            biodata = biodata.Where(s => s.StaffID.Equals(StaffBioData.StaffID));
            StaffIDExists = biodata.AsNoTracking().FirstOrDefault();
            _context.Entry(StaffBioData).State = StaffIDExists == null?
                               EntityState.Added :
                               EntityState.Modified;                
            await _context.SaveChangesAsync();
            var filesave = Path.Combine(_env.WebRootPath, "Documents/OnBoardingAttachments", StaffBioData.EmpID, "IM-" + StaffBioData.EmpID + StaffPhoto.FileName);
            using (var stream = System.IO.File.Create(filesave))
            {
                await StaffPhoto.CopyToAsync(stream);
                //TempData["Success"] = "Success";
                ImageName = "IM-" + StaffBioData.EmpID + StaffPhoto.FileName;
            }
            return new OkResult();
        }
    }
/--------------图像上传---------------//
[BindProperty]
公共文件StaffPhoto{get;set;}
公共字符串ImageName{get;set;}
公共异步任务OnGetAsync(int?StaffID)
{
StaffGender=新选择列表(_context.Gender,“StaffGender”,“StaffGender”);
StaffReligion=新选择列表(_context.Religion,“StaffReligion”,“StaffReligion”);
StaffBioData=wait _context.StaffBioData.FirstOrDefaultAsync(m=>m.StaffID==StaffID);
DirectoryInfo di=newdirectoryinfo(Path.Combine(_env.WebRootPath,“Documents/OnBoardingAttachments”,StaffBioData.EmpID.ToString());
}
公共异步任务OnPostUpdateBioDataAsync(StaffBioData StaffBioData)
{
StaffGender=新选择列表(_context.Gender,“StaffGender”,“StaffGender”);
StaffReligion=新选择列表(_context.Religion,“StaffReligion”,“StaffReligion”);
如果(!ModelState.IsValid)
{
返回页();
}
其他的
{
var biodata=来自_上下文中的u。StaffBioData选择u;
biodata=biodata.Where(s=>s.StaffID.Equals(StaffBioData.StaffID));
StaffIDExists=biodata.AsNoTracking().FirstOrDefault();
_context.Entry(StaffBioData).State=StaffIDExists==null?
EntityState。添加了:
修改的实体状态;
wait_context.SaveChangesAsync();
var filesave=Path.Combine(_env.WebRootPath,“Documents/OnBoardingAttachments”,StaffBioData.EmpID,“IM-”+StaffBioData.EmpID+StaffPhoto.FileName);
使用(var stream=System.IO.File.Create(filesave))
{
等待StaffPhoto.CopyToAsync(流);
//TempData[“Success”]=“Success”;
ImageName=“IM-”+StaffBioData.EmpID+StaffPhoto.FileName;
}
返回新的OkResult();
}
}
Biodata.cshtml

<!-- Photo -->
            <div class="form-group">                
                <label class="control-label-staff"><b>Photo</b></label>
                  <span>
                    <br />
                    <img src="~/Documents/OnBoardingAttachments/@Request.Query["EmpID"].ToString()/@Model.ImageName" />
                  </span>
                  <input type="file" asp-for="StaffPhoto" class="form-control-staff" accept="image/*" style="border:1px solid white;margin-right:20px" />               
            </div>

照片

现在发生的事情是在编辑屏幕中,我没有得到@Model.ImageName的值 我的文件夹也会有其他文件,但我只需要显示前缀为“IM-”的文件
如需有关如何仅显示带有前缀的文件
IM-
,请检查以下代码,我们将不胜感激

public async Task OnGetAsync(int? StaffID)           
{
    StaffGender = new SelectList(_context.Gender, "StaffGender", "StaffGender");
    StaffReligion = new SelectList(_context.Religion, "StaffReligion", "StaffReligion");
    StaffBioData = await _context.StaffBioData.FirstOrDefaultAsync(m => m.StaffID == StaffID);
    var filePath = Directory.GetFiles(Path.Combine(_env.WebRootPath, "Documents/OnBoardingAttachments", StaffBioData.EmpID.ToString()));
    foreach(var path in filePath)
    {
        var name = Path.GetFileName(path);
        if(name.StartsWith("IM-"))
        {
            ImageName = name;
        }
    }          
}
结果:


Hi@Teena,我的回答帮你解决了这个问题吗?Hi@Rena,对不起,我会检查这个,我已经用其他方法解决了这个问题。之后,只有我得到了这个解决方案。让我检查一下。如果可行,我会将其标记为解决方案。非常感谢您的支持OK。很高兴您已经解决了您的问题。Hi@Rena,我收到以下错误,'当前命名空间中不存在类型或命名空间名称“GetFiles”。Hi@Teena,请确保使用System.IO添加
或使用:
System.IO.Path.GetFileName(Path)
Hi@Rena,我使用的是System.IO,我对GetFileName没有问题,错误显示在Directory.GetFilesHi@Teena,哦,对不起,我犯了错误。您的错误应该在这里:
var filePath=Directory.GetFiles
。这是目录而不是路径。很抱歉,我说的可能让您感到困惑。请尝试以下操作:
var filePath=System.IO.Directory.GetFiles(System.IO.Path.Combine(_env.WebRootPath,“Documents/OnBoardingAttachments”,StaffBioData.EmpID.ToString())并检查是否仍然出错。我说的对吗?您在这行中出错了吗?