ASP.NET MVC实现保存编辑后返回原PIF详情页的按钮方案
解决ASP.NET MVC中SAEs保存后返回PIF详情页的问题
核心思路
要实现“保存并返回PIF详情页”,需要让按钮触发表单提交(执行保存逻辑),然后在控制器中根据ProjectID重定向到目标页面,而非单纯跳转。
步骤1:修改SAEs的Create/Edit视图(以Edit.cshtml为例)
确保表单包含ProjectID隐藏字段,同时添加带标识的提交按钮:
@model YourNamespace.Models.SAE @using (Html.BeginForm("Edit", "SAEs", FormMethod.Post)) { @Html.AntiForgeryToken() <!-- 现有表单字段 --> @Html.HiddenFor(m => m.ProjectID) <!-- 隐藏字段传递ProjectID --> <!-- 保存并返回按钮 --> <button type="submit" name="returnToPIF" value="true" class="btn btn-primary">保存并返回PIF详情页</button> <!-- 原有保存按钮 --> <button type="submit" class="btn btn-default">保存</button> }
Create视图逻辑一致,需确保ProjectID被正确传入并渲染为隐藏字段。
步骤2:修改SAEs控制器的HttpPost Edit方法
保存完成后,判断是否触发“返回PIF”的提交,再重定向到PIF详情页:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(SAE model, bool returnToPIF = false) { if (ModelState.IsValid) { // 执行保存逻辑 db.Entry(model).State = EntityState.Modified; db.SaveChanges(); // 判断是否需要返回PIF详情页 if (returnToPIF && model.ProjectID > 0) { return RedirectToAction("Details", "PIF", new { id = model.ProjectID }); } // 默认跳转至SAEs列表页 return RedirectToAction("Index"); } // 验证失败返回原视图 return View(model); }
步骤3:适配Create方法(同理)
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(SAE model, bool returnToPIF = false) { if (ModelState.IsValid) { db.SAEs.Add(model); db.SaveChanges(); if (returnToPIF && model.ProjectID > 0) { return RedirectToAction("Details", "PIF", new { id = model.ProjectID }); } return RedirectToAction("Index"); } return View(model); }
步骤4:确保从PIF详情页跳转时传递ProjectID
在PIF的Details视图中,跳转至SAEs创建/编辑页的链接需携带ProjectID:
<!-- 创建SAE的链接 --> @Html.ActionLink("新建SAE条目", "Create", "SAEs", new { projectID = Model.ProjectID }, null) <!-- 编辑SAE的链接(假设当前PIF关联的SAE有Id) --> @Html.ActionLink("编辑SAE条目", "Edit", "SAEs", new { id = Model.AssociatedSAE.Id, projectID = Model.ProjectID }, null)
然后在SAEs控制器的HttpGet方法中接收并赋值给模型:
public ActionResult Create(int projectID) { var newSAE = new SAE { ProjectID = projectID }; return View(newSAE); } public ActionResult Edit(int id, int projectID) { var sae = db.SAEs.Find(id); if (sae == null) { return HttpNotFound(); } sae.ProjectID = projectID; // 确保ProjectID被赋值 return View(sae); }
内容的提问来源于stack exchange,提问作者Sally Parkes
相关产品推荐
相关产品推荐

