ASP.NET MVC中Create方法实现CategoryID自增并隐藏输入框
隐藏CategoryID输入框并实现自动自增的方案
1. 先搞定数据库端的自增配置
不管你用Code First还是直接操作数据库,必须把CategoryID设为自增主键:
- 用Code First的话,在实体类里加特性配置:
public class Category { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int CategoryID { get; set; } public string CategoryName { get; set; } }
- 直接操作数据库(以SQL Server为例),在表设计里把
CategoryID的标识规范设为“是”,增量设为1,这样数据库会自动给新增的行生成递增的ID。
2. 修改Create视图,删掉CategoryID的输入框
找到自动生成的Create.cshtml视图,把对应CategoryID的输入代码删掉就行。原来的代码大概长这样:
<div class="form-group"> <label asp-for="CategoryID" class="control-label"></label> <input asp-for="CategoryID" class="form-control" /> <span asp-validation-for="CategoryID" class="text-danger"></span> </div>
直接删掉这段,用户就看不到CategoryID的输入框了。如果担心模型绑定有问题,也可以换成隐藏域,但其实没必要——因为数据库会自动生成ID,前端根本不需要传这个值。
3. 调整Create的POST动作(可选)
自动生成的POST方法里,Bind属性可能包含了CategoryID,你可以把它去掉,只保留CategoryName:
[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create([Bind("CategoryName")] Category category) { if (ModelState.IsValid) { _context.Add(category); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } return View(category); }
这样可以避免前端误传CategoryID值干扰自增逻辑,让EF完全交给数据库处理ID生成。
内容的提问来源于stack exchange,提问作者Abapito
相关产品推荐
相关产品推荐

