C# asp.net post后是否为空?编辑模型
我是asp.net新手,但是我在创建一个简单的编辑方法时遇到了很多麻烦。我在谷歌上搜索了很多,但都没有帮助。虽然我已经看到了这个问题,但没有任何答案与我的情况相关 我已经创建了create方法,但是在edit方法中,从表单检索数据之后,所有属性seam要么为空,要么为0 我花了两天时间在这上面,不知道该怎么办。请告知 这是控制器的两种方法C# asp.net post后是否为空?编辑模型,c#,asp.net,post,asp.net-core-mvc,C#,Asp.net,Post,Asp.net Core Mvc,我是asp.net新手,但是我在创建一个简单的编辑方法时遇到了很多麻烦。我在谷歌上搜索了很多,但都没有帮助。虽然我已经看到了这个问题,但没有任何答案与我的情况相关 我已经创建了create方法,但是在edit方法中,从表单检索数据之后,所有属性seam要么为空,要么为0 我花了两天时间在这上面,不知道该怎么办。请告知 这是控制器的两种方法 public IActionResult Edit(int? id) { if (id == null)
public IActionResult Edit(int? id)
{
if (id == null)
{
return HttpNotFound();
}
Question question = _context.questions.Single(m => m.id == id);
if (question == null)
{
return HttpNotFound();
}
return View(question);
}
[HttpPost]
public IActionResult Edit( Question question)
{
if(question.id == 0)
return HttpNotFound();
// _context.questions.Attach(question);
// _context.Entry(question).State = EntityState.Modified;
// _context.SaveChangesAsync();
return RedirectToAction("Index");
}
视图的形式
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Edit</title>
</head>
<body>
<form asp-action="Edit" method="post" >
<div class="form-horizontal">
<h4>Question</h4>
<hr />
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<div class="form-group">
<input asp-for="id" class="form-control" />
</div>
<div class="form-group">
<label asp-for="question" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="question" class="form-control" />
<span asp-validation-for="question" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="title" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="title" class="form-control" />
<span asp-validation-for="title" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="answer" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="answer" class="form-control" />
<span asp-validation-for="answer" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
}
</body>
</html>
}
该模型只是一个非常简单的东西,具有Int-Id和一些字符串属性
请告诉我,为什么会出现此错误?您的输入没有名称,并且您没有使用Razor的帮助程序来创建它们,这就是为什么您的模型在HttpPost编辑方法中为空 以下是编辑视图的示例:
@model ControleDeProducaoWeb.Models.EquipamentosViewModel
<h2>@ViewBag.Title</h2>
<hr />
@using (Html.BeginForm("Save", ViewContext.RouteData.Values["controller"].ToString(), FormMethod.Post, new { @class = "form-horizontal" }))
{
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-3 control-label">Id</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.Id, new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Coligada</label>
<div class="col-sm-4">
@Html.DropDownListFor(x => x.ColigadaId, ViewData.Model.Coligadas, new { @class = "form-control", @id = "lista-coligadas" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Filial</label>
<div class="col-sm-4">
@Html.DropDownListFor(x => x.FilialId, ViewData.Model.Filiais, new { @class = "form-control", @id = "lista-filiais" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Cala Mínima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.CalaMin, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Cala Máxima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.CalaMax, new { @class = "form-control" })
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-3 control-label">Comprimento Máximo</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.ComprimentoMax, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Altura Máxima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.AlturaMax, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Largura Máxima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.LarguraMax, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-3">
<a href="@Request.UrlReferrer.AbsoluteUri" class="btn btn-danger pull-right">Cancelar</a>
<button class="btn btn-success" type="submit">Salvar</button>
</div>
</div>
</div>
</div>
}
@model ControleDeProducaoWeb.Models.equipmentosviewmodel
@视图包。标题
@使用(Html.BeginForm(“Save”,ViewContext.RouteData.Values[“controller”].ToString(),FormMethod.Post,new{@class=“form horizontal”}))
{
身份证件
@TextBoxFor(x=>x.Id,新的{@class=“form control”,@disabled=“disabled”})
科利加达
@Html.DropDownListFor(x=>x.ColigadaId,ViewData.Model.Coligadas,新的{@class=“form control”,@id=“lista Coligadas”})
子女的
@Html.DropDownListFor(x=>x.FilialId,ViewData.Model.Filiais,新的{@class=“form control”,@id=“lista Filiais”})
卡拉米尼玛
@TextBoxFor(x=>x.CalaMin,新的{@class=“form control”})
卡拉马西马
@TextBoxFor(x=>x.CalaMax,新的{@class=“form control”})
Máximo综合酒店
@Html.TextBoxFor(x=>x.comprementomax,新的{@class=“form control”})
阿尔图拉·马西马
@TextBoxFor(x=>x.AlturaMax,新的{@class=“form control”})
拉古拉·马西马
@TextBoxFor(x=>x.LarguraMax,新的{@class=“form control”})
萨尔瓦多
}
这似乎是一个bug。
创建viewmodel并在模型周围使用它会有所帮助
抱歉,迟发了帖子您能展示您的问题模型吗?正如@garethb所问:请展示您的模型和整个视图,而不仅仅是表单。请通过浏览器的开发工具检查您的网络,查看数据是否以及如何发送。您好,我已经添加了必要的内容。感谢您的回答,我会在几个小时后回家试试!然而,如何通过标记助手实现这一点?在我看过的大多数教程中(已经有很多教程)都推荐了标记帮助器。标记帮助器是MVC6的一个新特性。您是否已将Microsoft.AspNet.Mvc.TagHelpers“添加到您的
GlobalImports.cshtml
?另外,将控制器添加到表单中的asp控制器标记中。不,我没有将它们添加到全局导入中,但表单确实指向正确的控制器。您必须为所需的每个视图启用标记帮助程序,或者为GlobalImports.cshtml
中的所有视图启用标记帮助程序。那也许这就是你的问题,似乎不是。MVC6安装了一个viewstartup文件,并在其中添加了一个viewstartup文件。困扰我的是create表单是有效的。。
@model ControleDeProducaoWeb.Models.EquipamentosViewModel
<h2>@ViewBag.Title</h2>
<hr />
@using (Html.BeginForm("Save", ViewContext.RouteData.Values["controller"].ToString(), FormMethod.Post, new { @class = "form-horizontal" }))
{
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-3 control-label">Id</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.Id, new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Coligada</label>
<div class="col-sm-4">
@Html.DropDownListFor(x => x.ColigadaId, ViewData.Model.Coligadas, new { @class = "form-control", @id = "lista-coligadas" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Filial</label>
<div class="col-sm-4">
@Html.DropDownListFor(x => x.FilialId, ViewData.Model.Filiais, new { @class = "form-control", @id = "lista-filiais" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Cala Mínima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.CalaMin, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Cala Máxima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.CalaMax, new { @class = "form-control" })
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-3 control-label">Comprimento Máximo</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.ComprimentoMax, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Altura Máxima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.AlturaMax, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Largura Máxima</label>
<div class="col-sm-4">
@Html.TextBoxFor(x => x.LarguraMax, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-3">
<a href="@Request.UrlReferrer.AbsoluteUri" class="btn btn-danger pull-right">Cancelar</a>
<button class="btn btn-success" type="submit">Salvar</button>
</div>
</div>
</div>
</div>
}