我有一个动作:
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非常感谢!
答案 0 :(得分:2)
一种简单的方法是将参数传递给action方法,让它知道你想要如何渲染视图。
public ActionResult GetOrders(int id, bool? isPartial)
{
return (isPartial.HasValue() && isPartial.Value)
? PartialView()
: View();
}
在上面的示例中,我们传入了isPartial
,但是,您也可以使用Request.IsAjaxRequest
除此之外,没有太多其他方法可以确定请求的方法。
答案 1 :(得分:2)
您可以使用ControllerContext.IsChildAction
。
public ActionResult Foo()
{
if (ControllerContext.IsChildAction)
{
return PartialView("GetOrdersPartial", model);
}
return View("GetOrders", model);
}
另外,我建议使用Html.RenderAction
。
每条评论更新
我还提到,根据我自己的经验,我从来没有必要这样做。要么你真的有一个完全不同的视图,要么你不知道PartialView将返回没有布局的视图。