我想制作一个GET操作,只有在被另一个操作调用时才会运行,所以如果用户在地址栏中键入URL则不会。我可以检查以确定是否是这种情况?
答案 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]
属性来装饰动作。
祝你好运