3

我有一个动作:

public ActionResult GetOrders(int id)
{
  ...
}

当我通过超链接(~/Order/GetOrders/1)访问它时,我希望 GetOrder 返回View()整个页面。

通过时@Html.Action("GetOrders"),我希望它返回 PartialView() 成为页面的一部分。


现在我使用 Erik Philips 的方法解决了这个问题。

public ActionResult GetOrders(int id)
{
    var orders = db.Order.Where(a => a.AdCompanyID == id).ToList();
    ViewBag.AdCompanyName = db.AdCompany.Where(a => a.ID == id).Select(a => a.Name).First().ToString();
    if (ControllerContext.IsChildAction)
    {
        ViewBag.isPartial = true;
        return PartialView(orders);
    }
    ViewBag.isPartial = false;
    return View(orders);
}
@{Html.RenderAction("GetOrders", new { id = Model.ID });}
@Html.ActionLink("Related orders", "GetOrders", new { id = item.ID })

在 GetOrders.cshtml 中:

@if (ViewBag.isPartial == false)
{
    ...
}

生成不同的视图。

Queti M. Porta 非常感谢!

4

2 回答 2

2

一种简单的方法是将参数传递给 action 方法,让它知道您希望如何呈现视图。

public ActionResult GetOrders(int id, bool? isPartial)
{
  return (isPartial.HasValue() && isPartial.Value)
         ? PartialView()
         : View();
}

在上面的例子中,我们传入了isPartial,但是,你也可以检查请求是否通过 ajax 使用Request.IsAjaxRequest

除此之外,没有很多其他方法可以确定请求的方法。

于 2013-08-08T04:00:59.787 回答
2

您可以使用ControllerContext.IsChildAction.

public ActionResult Foo()
{
  if (ControllerContext.IsChildAction)
  {
    return PartialView("GetOrdersPartial", model);
  }
  return View("GetOrders", model);
}

另外,我建议使用Html.RenderAction.

根据评论更新

我还要提到,根据我自己的经验,我从来没有需要这样做。要么你真的有一个完全不同的视图,要么你不知道 PartialView 将返回一个没有布局的视图。

于 2013-08-08T04:25:25.943 回答