ASP.NET MVC中Edit Action调用后未渲染Edit.cshtml视图问题咨询
问题原因
- 核心原因:你通过AJAX发起Edit请求后,服务端虽然正确返回了Edit视图的HTML代码,但你的JS代码没有对请求成功的返回结果做任何处理,AJAX属于后台异步请求,浏览器不会自动加载、渲染这段返回的HTML,所以页面没有任何变化。这也正好对应了你提到的Add功能正常、Edit功能失效的差异:Add功能是普通的页面跳转/表单提交,浏览器会自动处理服务端返回的视图,Edit是AJAX触发的请求,需要手动处理返回结果。
- 附加问题1:你的AJAX请求设置了
contentType: "application/json",但你没有传递任何JSON格式的请求体,Id是直接拼接在URL里的,属于不规范写法,极端场景下可能出现参数绑定失败的问题。 - 附加问题2:获取编辑页面属于查询类操作,按规范应该用GET请求而非POST请求,你给Edit Action加了
[HttpPost]特性,也不符合常规的页面跳转逻辑。
解决方案
根据你的业务需求可以选择两种方案:
方案1:直接页面跳转(和Add逻辑保持一致,实现最简单)
- 先修改控制器的Edit方法,把
[HttpPost]特性移除(默认就是GET请求,也可以显式标注[HttpGet]):
// 移除[HttpPost],或替换为[HttpGet] public IActionResult Edit(int Id) { try { var jurisdictionId = _user.Current().JurisdictionId; OrganizationType ot = new OrganizationType(); ot.Id = Id; ot.OrganizationName = _electedOfficials.getOrgTypeName(jurisdictionId, Id); return View(ot); } catch (Exception e) { _logger?.LogCritical(new EventId(101, "CAdminOrganizationType"), e, $"Error when loading Edit Orginization Type View"); throw; } }
- 修改前端触发逻辑,不需要AJAX,两种方式可选:
- 直接把表格内的Edit链接改成普通a标签:
<a href="/CAdminOrganizationType/Edit/@你的行Id变量" class="你的样式类">编辑</a>
- 如果一定要用JS函数触发,改成直接跳转页面即可:
function Edit(id) { window.location.href = '/CAdminOrganizationType/Edit/' + id; }
方案2:保留AJAX,局部渲染编辑视图(适合不需要跳转页面的场景,比如弹框显示编辑表单)
如果你的需求是不跳转当前页面,局部加载编辑视图,就需要手动处理AJAX的返回结果:
- 同样先把控制器的Edit方法改成支持GET请求,调整逻辑同上。
- 修改JS代码,增加成功回调处理返回的HTML:
function Edit(id) { var url = '/CAdminOrganizationType/Edit/' + id $.ajax({ type: "GET", url: url, success: function(html) { // 把返回的视图HTML插入到你页面预留的容器中,比如弹框、指定区块 // 示例:假设页面存在id为editFormBox的容器 $('#editFormBox').html(html); // 如果用弹框组件,这里可以手动调起弹框显示 } }).fail(function () { magalert.communicationError(); }); }
注意:如果用局部加载的方式,Edit.cshtml里的
@section scripts代码块不会自动执行,需要把对应的JS逻辑直接写在Edit视图的主内容区,或者在success回调里手动触发执行。
另外注意Edit视图里的提交按钮文字目前是Create Organization Type,可以根据业务改成更新类的文案,避免混淆。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

