如何解决ASP.NET核心图像文件验证错误如何验证ImageFile?
我有ASP.NET核心剃须刀页面,用于向人们介绍SQL数据库。在将新的byte []图像文件合并到de SQL数据库之前,一切工作正常。从那以后,网页在ModelState.IsValid处中断。 我有一个核心的Razor页面,但是当我将一个Imagefile字段添加到sql数据库时,验证中断。在添加FotoT字段之前,一切正常。我如何做才能像其他领域一样验证这个领域?这是我的代码:
@page
@model HojaFiliacion.Pages.ListaPacientes.CrearModel
@{
ViewData["Title"] = "Crear";
}
<br />
<h2 class="text-info">Crear Nuevo Paciente</h2>
<div class="border">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger">
</div>
<div class="container" style="padding:25px;">
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.Nombre"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.Nombre" oninput="this.value = this.value.toUpperCase()" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.Nombre" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.Apellido1"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.Apellido1" oninput="this.value = this.value.toUpperCase()" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.Apellido1" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.Apellido2"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.Apellido2" oninput="this.value = this.value.toUpperCase()" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.Apellido2" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.fNacimiento"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.fNacimiento" type="date" style="width: 200px;" value="@DateTime.Today" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.fNacimiento" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.Nif"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.Nif" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.Nif" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.sexo"></label>
</div>
<div class="col-sm-6">
<select asp-for="DatosFiliacion.sexo" class="form-control">
<option value="F">Femenino</option>
<option value="M">Masculino</option>
</select>
</div>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.idEstado"></label>
</div>
<div class="col-sm-6">
<select asp-for="DatosFiliacion.idEstado" class="form-control">
<option value="1">Soltero/a</option>
<option value="2">Casado/a</option>
<option value="3">Divorciado/a</option>
<option value="4">Separado/a</option>
<option value="5">En pareja</option>
<option value="6">Viudo/a</option>
<option value="7">Pareja de hecho</option>
</select>
</div>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.Domicilio"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.Domicilio" oninput="this.value = this.value.toUpperCase()" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.Domicilio" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.Poblacion"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.Poblacion" oninput="this.value = this.value.toUpperCase()" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.Poblacion" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.CP"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.CP" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.CP" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.idProvincia"></label>
</div>
<div class="col-sm-6">
<select asp-for="DatosFiliacion.idProvincia" class="form-control">
<option value='1'>Álava</option>
<option value='2'>A Coruña</option>
<option value='3'>Albacete</option>
<option value='4'>Alicante/Alacant</option>
<option value='5'>Almería</option>
<option value='6'>Asturias</option>
<option value='7'>Ávila</option>
<option value='8'>Badajoz</option>
<option value='9'>Illes Balears</option>
<option value='10' selected>Barcelona</option>
<option value='11'>Burgos</option>
<option value='12'>Cáceres</option>
<option value='13'>Cádiz</option>
<option value='14'>Cantabria</option>
<option value='15'>Castellón/Castelló</option>
<option value='16'>Ceuta</option>
<option value='17'>Ciudad Real</option>
<option value='18'>Córdoba</option>
<option value='19'>Cuenca</option>
<option value='20'>Girona</option>
<option value='21'>Granada</option>
<option value='22'>Guadalajara</option>
<option value='23'>Guipúzcoa</option>
<option value='24'>Huelva</option>
<option value='25'>Huesca</option>
<option value='26'>Jaén</option>
<option value='27'>La Rioja</option>
<option value='28'>Las Palmas</option>
<option value='29'>León</option>
<option value='30'>Lleida</option>
<option value='31'>Lugo</option>
<option value='32'>Madrid</option>
<option value='33'>Málaga</option>
<option value='34'>Melilla</option>
<option value='35'>Murcia</option>
<option value='36'>Navarra</option>
<option value='37'>Ourense</option>
<option value='38'>Palencia</option>
<option value='39'>Pontevedra</option>
<option value='40'>Salamanca</option>
<option value='41'>Santa Cruz de Tenerife</option>
<option value='42'>Segovia</option>
<option value='43'>Sevilla</option>
<option value='44'>Soria</option>
<option value='45'>Tarragona</option>
<option value='46'>Teruel</option>
<option value='47'>Toledo</option>
<option value='48'>Valencia/Valéncia</option>
<option value='49'>Valladolid</option>
<option value='50'>Vizcaya</option>
<option value='51'>Zamora</option>
<option value='52'>Zaragoza</option>
</select>
</div>
<span asp-validation-for="DatosFiliacion.idProvincia" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.idPaisISO3166"></label>
</div>
<div class="col-sm-6">
<select asp-for="DatosFiliacion.idPaisISO3166" class="form-control">
<option value="4">Afghanistan</option>
....
<option value="716">Zimbabwe</option>
</select>
</div>
<span asp-validation-for="DatosFiliacion.idPaisISO3166" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.eMail"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.eMail" oninput="this.value = this.value.toLowerCase()" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.eMail" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.TelefonoM"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.TelefonoM" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.TelefonoM" class="text-danger"></span>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.TelefonoF"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.TelefonoF" class="form-control" />
</div>
<span asp-validation-for="DatosFiliacion.TelefonoF" class="text-danger"></span>
</div>
</div>
</div>
<div class="container" style="padding:25px;">
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.LOPD"></label>
</div>
<div class="col-sm-6">
<input asp-for="DatosFiliacion.LOPD" type="checkbox" />
<label>He leído y acepto la política de protección de datos</label>
</div>
<span asp-validation-for="DatosFiliacion.LOPD" class="text-danger"></span>
</div>
</div>
</div>
</form>
<form method="post" enctype="multipart/form-data">
<div class="container" style="padding:25px;">
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.FotoT"></label>
</div>
<div class="custom-file">
<input asp-for="DatosFiliacion.FotoT" class="custom-file-input form-control">
<label class="custom-file-label">Haz click para cargar foto</label>
</div>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3 offset-sm-3">
<input type="submit" value="Crear" class="btn btn-primary form-control" />
</div>
<div class="col-sm-3">
<a asp-page="Index" class="btn btn-success form-control">Volver</a>
</div>
</div>
</div>
</div>
</form>
</div>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
我的CS文件:
解决方法
您应该使用IFormFile
来接收表单提交的图像文件。就像您的原始帖子一样来做。定义一个单独的属性Upload
来接收它,并在其上设置[Required]
属性。然后在您的post方法中,将Upload转换为byte []并将其填充到FotoT。
我根据您的代码制作了一个演示,您可以参考以下代码。
型号:
public class Pacientes
{
public int Id { get; set; }
[Display(Name = "Foto")]
public byte[] FotoT { get; set; }
public bool LOPD { get; set; }
}
Create.csthml:
<h1>Create</h1>
<div class="border">
<form method="post" enctype="multipart/form-data">
<div class="container" style="padding:25px;">
<div class="from-group">
<div class="row">
<div class="col-sm-3">
<label asp-for="DatosFiliacion.FotoT"></label>
</div>
<div class="custom-file">
<input asp-for="Upload" type="file" class="custom-file-input form-control">
<label class="custom-file-label">Haz click para cargar foto</label>
</div>
</div>
</div>
<div class="from-group">
<div class="row">
<div class="col-sm-3 offset-sm-3">
<input type="submit" value="Crear" class="btn btn-primary form-control" />
</div>
<div class="col-sm-3">
<a asp-page="Index" class="btn btn-success form-control">Volver</a>
</div>
</div>
</div>
</div>
</form>
</div>
Create.csthml.cs:
public class CreateModel : PageModel
{
private IWebHostEnvironment _environment;
[Required]
[BindProperty]
public IFormFile Upload { get; set; }
private readonly PacientesContext _db;
public CreateModel(PacientesContext db,IWebHostEnvironment environment)
{
_environment = environment;
_db = db;
}
[BindProperty]
public Models.Pacientes DatosFiliacion { get; set; }
[TempData]
public string Mensaje { get; set; }
public void OnGet()
{
}
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var filePath = Path.Combine(_environment.WebRootPath,"uploads",Upload.FileName);
using (var fileStream = new FileStream(filePath,FileMode.Create))
{
await Upload.CopyToAsync(fileStream);
}
using (var memoryStream = new MemoryStream())
{
await Upload.CopyToAsync(memoryStream);
DatosFiliacion.FotoT = memoryStream.ToArray();
}
_db.Add(DatosFiliacion);
await _db.SaveChangesAsync();
return RedirectToPage("Index");
}
}
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。