【问题标题】:How to display the result of another controller action without using RedirectToAction如何在不使用 RedirectToAction 的情况下显示另一个控制器操作的结果
【发布时间】:2013-08-12 21:44:58
【问题描述】:

我有两个 ASP.NET MVC 控制器操作,如下所示,我希望 RenderComponent 在不调用 RedirectToAction 的情况下显示 RenderComponentPublic 的内容。

相反,我希望在RenderComponent 下显示内容并且不进行重定向。

有人可以提出一种方法来实现这一点吗?

控制器操作 1 - RenderComponent

[Authorize(Roles = "user")]
public ActionResult RenderComponent(
  string ckey,
  string ukey)
  {
        return RedirectToAction("RenderComponentPublic", new
                {
                    ckey,
                    ukey
        });
  }

控制器操作 2 - RenderComponentPublic

public ActionResult RenderComponentPublic(
  string ckey,
  string ukey)
  {
      return PartialView("_ThisContent");
  }

【问题讨论】:

  • 所以你想要两者的内容?例如。还返回RenderComponent 并显示RenderComponentPublic

标签: asp.net-mvc


【解决方案1】:

您始终可以在 C# 中调用其他操作。

[Authorize(Roles = "user")]
public ActionResult RenderComponent(
  string ckey,
  string ukey)
  {
        return RenderComponentPublic(ckey,ukey);
  }

【讨论】:

  • 直接调用操作可能是最简单的方法。谢谢史蒂文。
  • 如果 RenderComponentPublic 在另一个控制器中?
  • @JuanCarlosVelez 您可以创建另一个控制器的实例,然后调用类似new OtherController().RenderComponentPublic() 的操作。但这可能会产生意想不到的副作用,因为并非所有 HTTP 请求信息都会传递到新上下文中。但是,如果您想要更详细的答案,您可能需要 ask a new question 提供您的具体用例。
【解决方案2】:

一种可能适合您需求的方法是致电Html.RenderAction 所以在您的RenderComponent 视图中,只需致电;

@(Html.RenderAction("RenderComonentPublic", new { ckey = Model.ckey, ukey = Model.ukey });)

@Html.Action("RenderComonentPublic", new { ckey = Model.ckey, ukey = Model.ukey })

您必须将ckeyukey 传递到模型中的视图或 ViewBag 或其他东西中。

您的RenderComponentPublic 视图需要将其layout 页面设置为null,以便它不会在布局中呈现。

不确定这是否是您要查找的内容。

【讨论】:

  • 嗨蒂姆。 RenderComonentPublic 没有关联的视图,所以我需要使用 Steven 的方法。谢谢你的回答。
  • 我注意到它只是返回部分视图,为什么不只是 @Html.Partial("_ThisContent")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多