同一控制器中RedirectToAction跳转不生效该如何解决?
核心问题说明
你当前使用的return View()不属于重定向操作,仅会在当前/projects/assign/2路由下直接渲染Create视图,既不会触发地址栏路径变更,也不会执行Create对应的Action方法逻辑。你收到的报错大概率是因为Create视图要求的模型类型与你传入的参数不匹配,或路由配置不符合预期。
正确实现方案
方案1:使用RedirectToAction实现路由重定向(符合你预期的跳转需求)
该方案执行后地址栏会自动变为/projects/create,同时支持传递id参数:
[HttpGet] public IActionResult Assign(int? id) { // 第一个参数为目标Action名称,第二个参数为要传递的路由参数 return RedirectToAction("Create", new { id = id }); }
同时需确保你的Create Action支持接收id参数:
[HttpGet] public IActionResult Create(int? id) { // 此处保留Create页的原有业务逻辑 return View(); }
方案2:不需要修改地址栏,仅渲染Create视图
如果不需要跳转路由,仅要在Assign的路由下展示Create页,需要保证传入的参数和Create视图声明的@model类型完全匹配:
// 示例:如果Create视图需要自定义视图模型,需先构造对应实例再传入 public class ProjectCreateViewModel { public int? Id { get; set; } // 补充其他视图需要的字段 } [HttpGet] public IActionResult Assign(int? id) { var model = new ProjectCreateViewModel { Id = id }; return View("Create", model); }
报错排查建议
如果修改后仍有异常,可优先核对以下项:
- 路由配置中是否对Create接口做了特殊的参数限制
- Create.cshtml文件是否存放在正确的视图目录下(默认路径为Views/Projects/Create.cshtml)
- 开发环境下开启详细异常页,查看具体错误堆栈定位问题
内容的提问来源于stack exchange,提问作者mrnewguy1998
相关产品推荐
相关产品推荐

