ASP.NET MVC实现多条记录展示、单条编辑功能的问题咨询
解决方案
你的核心实现思路完全符合「无JS实现单条记录提交」的需求:每条记录独立包裹form标签,提交时只会发送当前form内的表单字段,天然只会返回当前被编辑的单条Resource实体,不需要提交全部条目。你现在无法正确获取实体,修复以下几个问题即可正常运行:
1. 确认EditorTemplate存放路径
EditorTemplate必须放在对应视图目录下的EditorTemplates文件夹中,命名要和实体类名完全一致:
如果使用Home控制器的Index视图,推荐路径为:/Views/Shared/EditorTemplates/Resource.cshtml 或者 /Views/Home/EditorTemplates/Resource.cshtml
模板文件名必须是Resource.cshtml,和实体类名完全匹配,否则@Html.EditorFor(x=>x)不会正确调用你写的模板,会生成错误的表单字段。
2. 优化EditorTemplate代码
将id字段改为隐藏域避免用户修改,补充基础的布局优化:
@addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers" @model learningMVC.Models.Resource <div style="margin:15px 0;padding:10px;border:1px solid #eee;"> <form asp-action="Index" asp-controller="Home" method="post"> @* id设为隐藏域,用户不需要直接编辑 *@ <input asp-for="id" type="hidden" /> <div> <label asp-for="title">资源标题</label> <input asp-for="title" class="form-control" /> </div> <div style="margin:8px 0;"> <label asp-for="value">资源值</label> <input asp-for="value" class="form-control" /> </div> <input type="submit" value="保存" class="btn btn-primary" /> </form> </div>
3. 补充控制器Post逻辑
添加数据验证和保存后的重定向逻辑,避免重复提交:
[HttpPost] public IActionResult Index(Resource resource) { if (ModelState.IsValid) { // 此处添加你的业务保存逻辑:根据resource.id更新数据库对应记录 // 示例:_context.Resources.Update(resource); // 示例:_context.SaveChanges(); } // 保存完成后重定向到Get方法,加载最新的全部资源列表 return RedirectToAction(nameof(Index)); }
原理解释
每个独立form提交时,只会把当前form内部的id、title、value三个字段提交到后端,ASP.NET MVC的模型绑定会自动把这三个字段映射成Resource类型的参数,全程不需要JavaScript参与。
内容的提问来源于stack exchange,提问作者cagdas
相关产品推荐
相关产品推荐

