【问题标题】:Using RenderAction() and posting back to sub-controller action使用 RenderAction() 并回发到子控制器动作
【发布时间】:2009-11-25 20:31:25
【问题描述】:

我的父视图也使用RenderAction() 呈现子控制器操作(返回PartialView)。一个示例是带有登录部分视图的首页(输入:用户名、密码、记住和操作:login

执行过程

  1. GET for Home/Index - 还显示我的登录控件,它的 login 指向子控制器 User/Login
  2. 用户输入凭据并点击登录
  3. User/Login 的 POST - 检查凭据并返回 ???

问题

如何从子控制器操作User/Login 返回父视图?
我的子控制器的部分视图可以呈现任何页面,所以我不能轻易返回父控制器操作的结果,例如:

return new HomeController().Index();

那么我应该如何处理我的子控制器动作及其部分视图?

编辑

我可以将父路由的附加数据发回我的子控制器操作,但我也会在我的子控制器操作中填充数据。在我的示例中,我必须显示某人的凭据无效。重定向会丢失这些...

【问题讨论】:

  • 只是想一想是否可以在登录控件上实现 AJAX 回发?这样你就不需要离开页面了。
  • 有可能,但整个解决方案也支持非javascript处理。这就是为什么它是一个问题......

标签: asp.net-mvc partial-views renderaction


【解决方案1】:

不要发布到 /User/Login 来执行登录,而是附加一个返回 url,这样你最终会得到 /User/Login?returnUrl=/Home/Index(url 编码可能会改变一点)

如果在查询字符串中设置了 returnUrl,则 /User/Login 的操作应该只将重定向操作返回到该 returnUrl。

抱歉,如果有点不清楚

【讨论】:

  • 很清楚。但是让我在我的问题中添加一些 EDIT 。问题是如果我填充即。 ModelState.Errors 他们会在重定向时丢失,不是吗?
  • 大多数站点通过使用专用登录页面来实现这一点,如果凭据无效,该页面会显示错误。如果身份验证成功,则将用户重定向到 returnUrl(如果 returnUrl 不存在,则重定向到 defaultUrl)。如果身份验证失败,用户将停留在 /User/Login 上。 /User/Login 包含一个登录表单和一个显示错误的区域...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多