【问题标题】:Rebinding JQuery Event Handlers after MicrosoftAjax returns a PartialViewMicrosoftAjax 返回 PartialView 后重新绑定 JQuery 事件处理程序
【发布时间】:2010-06-20 19:12:45
【问题描述】:

我正在使用 ASP.NET MVC 使用 AJAX 功能。我创建了一个页面,其中包含从数据库生成的类别菜单,单击该菜单时会向控制器发出 AJAX 请求,然后控制器返回 PartialView。

<% foreach (var item in Model.Categories)
{ %>
    <li>
        <%= Ajax.ActionLink(item.CategoryName,
                                "Index", "Home",
                                new { id = item.CategoryID },
                                new AjaxOptions { UpdateTargetId = "gallery" })%>
    </li>
<% } %>


[HttpPost]
    public ActionResult Index(int id)
    {

        List<Image> images = imageRepository.getCategoryImages(id).ToList();

        return PartialView("gallery", images);
    }

图库 div 包含许多图像,在第一次加载时,它具有存储在数据库中的每个图像。我使用了一个 JQuery 插件的灯箱,所以当点击缩略图时,它会放大并且用户可以点击图像。当部分视图返回时,灯箱事件处理程序不再绑定。

$(function () {
        $('#gallery a').lightBox();
    });

是否有可能在 M$AJAX 请求完成后以某种方式触发 Javascript 函数来重新绑定处理程序?

这是我打算自学如何在 ASP.NET MVC 中使用 AJAX 做一些很酷的事情的一系列项目的一部分。我打算在完成后在我的网站上发布代码,以便其他人可以像我一样学习。我倾向于发现 JQuery -> PHP -> MySQL 开源堆栈有很多示例。但很少使用 ASP.NET MVC。

谢谢,

乔恩

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    AjaxOptions 属性之一是 OnSuccess 属性,它将在 AJAX 请求成功后调用一些 JavaScript 代码。将其值设置为 JavaScript 函数的名称,然后使用 jQuery 激活 LightBox 脚本。

    new AjaxOptions { UpdateTargetId = "gallery", OnSuccess="ActivateLightBox" })
    

    还有一些脚本:

    <script ...>
        function ActivateLightBox() {
            $(function () { 
                $('#gallery a').lightBox(); 
            }); 
        }
    </script>
    

    【讨论】:

    • 你是艾隆知识的源泉!再次感谢您的帮助!
    【解决方案2】:

    你有两个选择。要么将该 javascript 添加到画廊视图中,以便在加载部分视图时运行它,要么更好的解决方案是 @Eilon 刚进入的那个。

    【讨论】:

    • 我尝试在部分视图中包含脚本,但加载时它不会执行。我阅读了 Phil Haack 写的一篇文章,他说当在 AJAX 请求中传回部分时,框架不执行脚本。他的文章说要使用 JQuery .live() 但我无法让它工作。 Eilon 的解决方案有效且非常简单。谢谢,乔恩
    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多