ASP.NET MVC:仅由其他操作调用的Action

时间:2011-01-19 21:29:01

标签: asp.net-mvc asp.net-mvc-2

我想制作一个GET操作,只有在被另一个操作调用时才会运行,所以如果用户在地址栏中键入URL则不会。我可以检查以确定是否是这种情况?

3 个答案:

答案 0 :(得分:15)

您可以使用ChildActionOnlyAttribute装饰动作。

  [ChildActionOnly]
  public ActionResult Menu() {
    var menu = GetMenuFromSomewhere();
      return PartialView(menu);
  }

然后您可以像往常一样使用RenderAction()和Action()Html助手,并且无法通过URL调用该操作。

这些是MVC 2的新功能,但从标签中我假设您已经在使用它。

示例:http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

答案 1 :(得分:12)

将该操作访问修饰符设为私有。由于它是一个私有方法,因此它不是一个操作方法,不能通过URL调用:

private ActionResult PrivateAction()
{
    return View("SomeView");
}

然后从动作方法中调用它:

public ActionResult SomeAction()
{
    if(someCondition)
        return PrivateAction();
}

答案 2 :(得分:0)

@Andras使用[ChildActionOnly]进行装饰操作可以防止通过ajax调用操作,这在某些情况下是必要的。关于@ajbeaven问你是对的但是在ajax调用情况下我认为最好用[HttpPost]属性来装饰动作。

祝你好运