[英]EditorFor losing data on post
请给我一些帮助!
我有这个模型:
public class MyModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
我也有一个EditorTemplate
@model MyProject.Models.MyModel
<div class="form-group">
<label class="col-md-2 control-label">@Html.DisplayFor(model => model.Name)</label>
<div class="col-md-10">
<input asp-for="@Model.Value" class="form-control"/>
<span asp-validation-for="@Model.Value" class="text-danger"></span>
</div>
</div>
编辑视图
@using Microsoft.AspNetCore.Mvc.ViewFeatures
@model List<MyProject.Models.MyModel>
@{
ViewData["Title"] = "Edit";
}
<div class="spaceUnderLogo">
<div class="row">
<div class="col-md-12 ">
<h2>Edit</h2>
<form id="manageMyModel" asp-controler="MyController" asp-action="Edit" method="post" class="">
<div class="form-horizontal">
<hr />
@Html.EditorForModel()
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</div>
</div>
</form>
</div>
</div>
</div>
MyController有这两种方法
[HttpGet]
public async Task<IActionResult> Edit()
{
List<MyModel> model = await GetCurrentInfoAsync();
return View(model);
}
[HttpPost]
public async Task<ActionResult> Edit(List<MyModel> model)
{
// here is where I have the issue
}
如您所见,post方法存在问题。 当我得到视图时,我发送2个对象:{Id = 1,名称=“ A”,值=“ 9999”}和{Id = 2,名称=“ B”,值=空}
将B Value属性编辑为“ 8888”,在帖子中,我仅使用类似以下Value属性的列表:{Id = 0,名称= null,值=“ 9999”}和{Id = 0,名称= null ,Value =“ 8888”}
任何想法?
您可以使用:
@model MyProject.Models.MyModel
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.Name)
<div class="form-group">
<label class="col-md-2 control-label">@Html.DisplayFor(model => model.Name)</label>
<div class="col-md-10">
<input asp-for="@Model.Value" class="form-control"/>
<span asp-validation-for="@Model.Value" class="text-danger"></span>
</div>
</div>
这里的窍门是:
@Html.HiddenFor(model => model.Id)
这将确保表单在发布时包含该值,但是在表单上没有可见的编辑器。 对于以任何形式提交的GET
检索的模型,对于任何只读字段,您都将需要这些隐藏输入之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.