首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ajax中使用MVC3仅限子操作属性

在ajax中使用MVC3仅限子操作属性
EN

Stack Overflow用户
提问于 2013-03-18 17:05:55
回答 2查看 4.4K关注 0票数 11

我正在使用ajax加载一个局部视图,以便在kendo网格中添加/编辑一行。当我按下行中的编辑按钮时,我还希望不允许用户直接从浏览器调用Home/AddModify操作。

如果我将[ChildActionOnly]放到我的"AddModify“操作中,它不会让我加载部分视图,因为所有内容都在ajax调用中,我不想让它出现在视图中的某个地方,比如@Html.Action("Home/AddModify",model)。我也不想在页面加载时从头开始加载它。

我是否可以调用局部视图,使其仅按需(动态)查看?

EN

回答 2

Stack Overflow用户

发布于 2013-03-18 17:13:32

您需要的是AJAX的唯一属性,看看this question

像这样声明它

代码语言:javascript
运行
复制
public class AjaxOnlyAttribute : ActionMethodSelectorAttribute 
    {
        public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
        {
            return controllerContext.RequestContext.HttpContext.Request.IsAjaxRequest();
        }
    }

并像这样使用它

代码语言:javascript
运行
复制
[AjaxOnly]
public ActionResult ajaxMethod()
{

}
票数 19
EN

Stack Overflow用户

发布于 2013-03-18 17:14:30

您可以在HttpRequestBase上使用IsAjaxRequest扩展方法。

它不会阻止每个用户调用它(除非它是可公开访问的,否则您无法阻止它们)(因为他们可以将头文件修改为任何内容),但对于一般用途,它可能对您有好处。

您可以创建一个actionfilter:

代码语言:javascript
运行
复制
public class RestrictToAjaxAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
        {
            throw new InvalidOperationException("This action is only available via ajax");
        }
    }
}

并将此属性放在您的操作之上:

代码语言:javascript
运行
复制
[RestrictToAjax]
public ActionResult YourAction()
{
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15472978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档