ASP.NET MVC表单无法获取输入值及提交404问题求助
问题修复方案
1. 解决404页面找不到错误
你的表单asp-controller属性配置错误,AddClassDB是HomeController中的Action方法,并非控制器名称,正确的控制器名称为Home。修改表单标签如下:
<form method="post" asp-controller="Home" asp-action="AddClassDB">
2. 解决无法接收用户输入值的问题
核心问题及修复:
- 表单输入框缺少
name属性:ASP.NET Core的模型绑定依赖name属性与模型类的属性名匹配才能完成赋值。假设你的ClassTable类中有一个名为ClassName的属性,给input添加对应name:
<input type="text" class="form-control" id="classNameInput" name="ClassName">
- 原HTML存在结构错误(多余的div闭合标签),修正后的完整表单代码:
@{ ViewData["Title"] = "Class' Management"; } <br /> <h2>Add Class</h2> <form method="post" asp-controller="Home" asp-action="AddClassDB"> <div class="container"> <div class="form-group"> <label for="classNameInput">Class Name</label> <input type="text" class="form-control" id="classNameInput" name="ClassName"> </div> </div> <br/> <div class="float-right"> <button type="submit" class="btn btn-success">Add</button> </div> </form> <br /> <h2>Manage Class</h2>
控制器代码修正
给AddClassDB方法添加[HttpPost]特性,明确它处理POST请求,避免请求类型不匹配:
[HttpPost] public ActionResult AddClassDB(ClassTable _table) { // 此处可添加SQL保存逻辑,比如使用EF Core操作数据库 Console.WriteLine(_table.ClassName); // 现在能正确获取输入值 return RedirectToAction("ManageClass"); // 提交后重定向回管理页面,防止重复提交 }
额外补充
- 确保
ClassTable类的属性名与input的name属性完全一致(大小写敏感),例如:
public class ClassTable { public int Id { get; set; } public string ClassName { get; set; } }
- 若要实现SQL保存,需配置数据库上下文(DbContext),通过EF Core的
DbSet<ClassTable>执行添加操作:
// 假设你已定义StudentDbContext类 private readonly StudentDbContext _dbContext; // 构造函数注入上下文 public HomeController(ILogger<HomeController> logger, StudentDbContext dbContext) { _logger = logger; _dbContext = dbContext; } [HttpPost] public async Task<ActionResult> AddClassDB(ClassTable _table) { if(ModelState.IsValid) { _dbContext.ClassTables.Add(_table); await _dbContext.SaveChangesAsync(); return RedirectToAction("ManageClass"); } return View(); }
内容的提问来源于stack exchange,提问作者Emir Bolat
相关产品推荐
相关产品推荐

