Это не имеет никакого смысла.Эти 2 атрибута являются взаимоисключающими.Если действие помечено [ChildActionOnly]
, клиент никогда не сможет получить к нему прямой доступ с помощью HTTP-запроса (будь то синхронный или асинхронный).Поэтому, если вы хотите, чтобы действие было когда-либо доступно с использованием AJAX, вы никогда не должны украшать его атрибутом [ChildActionOnly]
.
Я не знаю, что это за атрибут [AjaxOnly]
и откуда он берется, но в зависимости от того, как он реализован, вам может понадобиться настроить его, чтобы разрешить дочерние запросы действий, если он опирается только на Request.IsAjaxRequest()
метод.Например, если это что-то вроде этого:
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new HttpNotFoundResult();
}
}
}
, вы можете настроить его следующим образом:
public class AjaxOrChildActionOnlyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest() &&
!filterContext.IsChildAction
)
{
filterContext.Result = new HttpNotFoundResult();
}
}
}