jquery - 如何使用 jQuery 调用 MVC ChildActionOnly Controller 操作

标签 jquery asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个位于部分 View 中的 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 操作,因此它用 [ChildActionOnly] 装饰。我意识到它是直接用 jQuery .load() 调用的。

有没有办法保留 ChildActionOnly 限制,并仍然通过 .on('change' ...) 事件从 jQuery 调用它?

最佳答案

首先:创建一个支持 ChildActionOnly 和 Ajax 功能的自定义属性:

public class AjaxChildActionOnlyAttribute : ActionMethodSelectorAttribute
{
        public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
        {
            return controllerContext.RequestContext.HttpContext.Request.IsAjaxRequest() || controllerContext.IsChildAction;
        }
}

然后:将上面创建的属性用于您的部分 View :

[AjaxChildActionOnly]
public PartialViewResult LanguageListPartial(string id)
{
  //Function Logic
}

关于jquery - 如何使用 jQuery 调用 MVC ChildActionOnly Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443531/

相关文章:

asp.net-mvc-3 - MVC 3/4 中 URL 的语言 SEO 优化

javascript - 如何从客户端向服务器发送信息(Flask - python)

javascript - 如何使 div 在悬停时淡出?

javascript - 使 slider 滚动页面

asp.net-mvc-3 - 如何通过依赖注入(inject)使用 Entity Framework 上下文?

asp.net-mvc-3 - 我的 MVC BeginForm 如何知道要发布到哪个 url?

javascript - 更改 jquery 数据表列设置值

c# - 使用 Knockout 从 <select> 填充文本框

c# - Visual Studio SQL 数据库,执行批处理时出错(消息 1785)

javascript - 使用 JavaScript/jQuery,如何根据下拉列表中的选择过滤列表?