ASP.NET Core MVC:实现保存、保存并新建及取消功能的技术咨询
解决ASP.NET Core MVC中多提交按钮的逻辑处理问题
没问题,咱们一步步搞定这个多提交按钮的逻辑!你目前的代码已经有了基础,但还需要两个关键修改:给按钮添加name属性,以及在控制器中根据按钮值判断跳转方向。
第一步:修改视图,给提交按钮添加name属性
表单提交时,只有被点击的<button>的name和value会被发送到服务器,所以你需要给两个提交按钮设置相同的name(比如submitAction),这样控制器才能识别是哪个按钮被触发了:
<form asp-action="CreatePost"> <div class="row g-3"> <div class="form-group col-sm-6"> <label asp-for="Profile" class="control-label"></label> <input asp-for="Profile" class="form-control" /> <span asp-validation-for="Profile" class="text-danger"></span> </div> </div> <div class="d-flex flex-row justify-content-center"> <!-- 添加name="submitAction" --> <button type="submit" name="submitAction" value="Save" class="w-25 btn btn-primary btn-lg me-5">Save</button> <button type="submit" name="submitAction" value="SaveNew" class="w-25 btn btn-primary btn-lg me-5">Save+New</button> <a class="w-25 btn btn-secondary btn-lg me-5" asp-action="Index">Cancel</a> </div> </form>
第二步:更新控制器,处理按钮逻辑
在控制器的CreatePost方法中,添加一个参数来接收按钮的value,然后根据不同的值执行对应的操作。另外,强烈建议添加模型验证,确保表单数据合法后再保存:
[HttpPost] public IActionResult CreatePost(Profile obj, [FromForm] string submitAction) { // 先验证模型是否合法(比如Profile是否为空) if (ModelState.IsValid) { _db.UserProfiles.Add(obj); _db.SaveChanges(); // 根据按钮值判断跳转方向 if (submitAction == "SaveNew") { // 保存后返回创建页面,继续新建 return RedirectToAction("Create"); } else { // 保存后返回列表页 return RedirectToAction("Index"); } } // 如果模型验证失败,返回创建页面并显示错误信息 return View("Create", obj); }
补充说明
[FromForm]特性:确保参数从表单数据中绑定,避免模型绑定的歧义(比如如果你的Profile模型刚好有同名属性的话)。- 模型验证:如果用户没有填写
Profile(因为你加了[Required]特性),ModelState.IsValid会返回false,此时页面会显示你视图中定义的验证错误信息,提升用户体验。 - 取消按钮:你的取消按钮已经是
<a>标签跳转到Index,这个逻辑是对的,不需要修改。
这样修改后,点击「Save」就会保存并返回列表页,点击「Save+New」会保存后回到创建页面,完美实现你的需求!
内容的提问来源于stack exchange,提问作者ahp
相关产品推荐
相关产品推荐

