我有一个部分视图中的DropDownListFor。在更改时,它会触发jQuery脚本,但Fiddler显示HTTP 500错误:
The action 'LanguageListPartial' is accessible only by a child request.
调用脚本:
<script type="text/javascript">
$(function () {
$('#SelectedLanguage').on('change', function () {
var culture = $(this).val();
$('#test').load("/Account/LanguageListPartial/" + culture, function () {
location.reload(true);
});
});
});
</script>
我不希望直接调用Controller Action,因此它使用[ChildActionOnly]
进行修饰。我意识到它是用jQuery .load()
直接调用的。
有没有办法保留ChildActionOnly
限制并仍然使用.on('change' ...)
事件从jQuery调用它?
答案 0 :(得分:11)
首先:创建一个支持ChildActionOnly和Ajax功能的自定义属性:
public class AjaxChildActionOnlyAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.RequestContext.HttpContext.Request.IsAjaxRequest() || controllerContext.IsChildAction;
}
}
然后:对部分视图使用上面创建的属性:
[AjaxChildActionOnly]
public PartialViewResult LanguageListPartial(string id)
{
//Function Logic
}
答案 1 :(得分:6)
不,你不能这样做。 ChildActionOnly
属性的重点是防止因用户请求而调用它。