Html 通过查看将照片和视频保存到数据库中
我有一个登录和注销程序。 我有一个练习课,我有一个创建视图,允许我创建由姓名、照片、视频组成的练习。 我在“视图创建”中填写表单,当我单击“创建”时,我会看到此错误Html 通过查看将照片和视频保存到数据库中,html,asp.net-core,Html,Asp.net Core,我有一个登录和注销程序。 我有一个练习课,我有一个创建视图,允许我创建由姓名、照片、视频组成的练习。 我在“视图创建”中填写表单,当我单击“创建”时,我会看到此错误 NullReferenceException: Object reference not set to an instance of an object. WebApplication1.Controllers.ExerciciosGinasiosController.Create(ExerciciosGinasio exercic
NullReferenceException: Object reference not set to an instance of an object.
WebApplication1.Controllers.ExerciciosGinasiosController.Create(ExerciciosGinasio exerciciosGinasio, IFormFile fotografia, IFormFile video) in ExerciciosGinasiosController.cs
string nome_ficheiro = Path.GetFileName(fotografia.FileName);
在运动课上我有
[Table("Exercicios_Ginasio")]
public partial class ExerciciosGinasio
{
public ExerciciosGinasio()
{
Inclui = new HashSet<Inclui>();
}
[Key]
[Column("IDExercicios_Ginasio")]
public int IdexerciciosGinasio { get; set; }
[Required]
[Column("nome")]
[StringLength(30)]
public string Nome { get; set; }
[Required]
[Column("texto_descritivo")]
[StringLength(1000)]
public string TextoDescritivo { get; set; }
[Required]
[Column("foto")]
public string Foto { get; set; }
[Required]
[Column("video")]
public string Video { get; set; }
[InverseProperty("IdexerciciosGinasioNavigation")]
public virtual ICollection<Inclui> Inclui { get; set; }
}
}
[表(“Exercicios\u Ginasio”)]
公共部分类exerciosginasio
{
公共事业
{
Inclui=新的HashSet();
}
[关键]
[专栏(“IDExercicios_Ginasio”)]
公共int-idexerciosginasio{get;set;}
[必需]
[列(“名称”)]
[行政长官(30)]
公共字符串Nome{get;set;}
[必需]
[列(“文本描述”)]
[长度(1000)]
公共字符串TextoDescritivo{get;set;}
[必需]
[栏目(“foto”)]
公共字符串Foto{get;set;}
[必需]
[栏目(“视频”)]
公共字符串视频{get;set;}
[逆属性(“Idexerciosginasionavigation”)]
公共虚拟ICollection Inclui{get;set;}
}
}
在属于Exercises类(exercisecontroller)的控制器中,我使用此方法来创建新的练习
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("IdexerciciosGinasio,Nome,TextoDescritivo,Foto,Video")] ExerciciosGinasio exerciciosGinasio, IFormFile fotografia,IFormFile video)
{
string caminho = Path.Combine(_hostEnviroment.ContentRootPath, "wwwroot\\Exercicios");
string nome_ficheiro = Path.GetFileName(fotografia.FileName);
string caminho_completo = Path.Combine(caminho, nome_ficheiro);
FileStream fs = new FileStream(caminho_completo, FileMode.Create);
fotografia.CopyTo(fs);
exerciciosGinasio.Foto = caminho_completo;
fs.Close();
string caminho2 = Path.Combine(_hostEnviroment.ContentRootPath, "wwwroot\\Exercicios");
string nome_ficheiro2 = Path.GetFileName(video.FileName);
string caminho_completo2 = Path.Combine(caminho2, nome_ficheiro2);
FileStream _fs = new FileStream(caminho_completo2, FileMode.Create);
video.CopyTo(_fs);
exerciciosGinasio.Video = caminho_completo2;
_fs.Close();
if (ModelState.IsValid)
{
_context.Add(exerciciosGinasio);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(exerciciosGinasio);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(“idexerciosginasio,Nome,TextoDescritivo,Foto,Video”)]exerciosginasio exerciosginasio,ifformfile fotografia,ifformfile Video)
{
字符串caminho=Path.Combine(_hostenviromet.ContentRootPath,“wwwroot\\exercios”);
字符串nome_ficheiro=Path.GetFileName(fotografia.FileName);
字符串caminho_completo=Path.Combine(caminho,nome_ficheiro);
FileStream fs=newfilestream(caminho_completo,FileMode.Create);
fotografia.CopyTo(fs);
exerciciosGinasio.Foto=caminho_completo;
fs.Close();
字符串caminho2=Path.Combine(_hostenviromet.ContentRootPath,“wwwroot\\exercios”);
字符串nome_ficheiro2=Path.GetFileName(video.FileName);
字符串caminho_completo2=Path.Combine(caminho,nome_ficheiro2);
FileStream\u fs=newfilestream(caminho\u completo2,FileMode.Create);
视频。复制到(_fs);
exerciosginasio.Video=caminho_completo 2;
_fs.Close();
if(ModelState.IsValid)
{
_添加(exerciosginasio);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
返回视图(exerciosginasio);
}
根据这种方法,我有
@model WebApplication1.Models.ExerciciosGinasio
@{
ViewData["Title"] = "Create";
}
<h4>Criar Exercicio</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Nome" class="control-label"></label>
<input asp-for="Nome" class="form-control" />
<span asp-validation-for="Nome" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="TextoDescritivo" class="control-label"></label>
<input asp-for="TextoDescritivo" type="text" class="form-control" />
<span asp-validation-for="TextoDescritivo" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Foto" class="control-label"></label>
<input asp-for="Foto" type="file" class="form-control" accept=".png, .jpg, .bmp" value="" />
@*<span asp-validation-for="Foto" class="text-danger"></span>*@
<div>
<input type="hidden" name="fotografia" value="0" />
</div>
<div class="form-group">
<label asp-for="Video" class="control-label"></label>
<input asp-for="Video" type="file" class="form-control" />
@*<span asp-validation-for="Video" class="text-danger"></span>*@
</div>
<div>
<input type="hidden" name="video" value="0" />
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<br />
<div>
<a asp-action="Index" asp-controller="Home">Voltar</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
@model WebApplication1.Models.exerciosginasio
@{
ViewData[“标题”]=“创建”;
}
循环练习
@**@
@**@
沃尔特
@节脚本{
@{wait Html.RenderPartialAsync(“_validationScript”);}
}
有人知道是什么导致了这个错误吗?我该怎么解决
NullReferenceException:对象引用未设置为对象的实例
字符串nome_ficheiro=Path.GetFileName(fotografia.FileName)
在您的查看页面中,我们可以发现您正在为fotografia
和video
使用默认值为0的隐藏字段,但您的Create操作需要通过ifformfile
对象创建文件,如果调试代码,您会发现fotografia
为null,读取fotografia
的FileName属性时会导致异常
要修复它,您可以修改如下代码
照片和视频的输入
测试结果
这是否回答了您的问题?
<div class="form-group">
<label asp-for="Foto" class="control-label"></label>
<input type="file" class="form-control" name="fotografia" accept=".png, .jpg, .bmp" />
</div>
<div>
<input type="hidden" name="Foto" value="0" />
</div>
<div class="form-group">
<label asp-for="Video" class="control-label"></label>
<input type="file" name="fvideo" class="form-control" />
</div>
<div>
<input type="hidden" name="Video" value="0" />
</div>
[HttpPost]
public IActionResult Create([Bind("IdexerciciosGinasio,Nome,TextoDescritivo,Foto,Video")] ExerciciosGinasio exerciciosGinasio,
IFormFile fotografia,
IFormFile fvideo)
{
string nome_ficheiro = Path.GetFileName(fotografia.FileName);
//code logic here
return View(exerciciosGinasio);
}