2010-06-20 118 views
2

我玩弄使用ASP.NET MVC AJAX功能后。我创建了一个页面,其中包含一个从数据库中生成的类别菜单,点击时会向Controller发出AJAX请求,然后控制器返回PartialView。重新绑定JQuery的事件处理程序MicrosoftAjax返回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插件,所以当缩略图点击放大时,用户可以点击图片。当返回部分视图时,不再绑定lightbox事件处理程序。

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

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

这是一个系列的,我打算采取自学如何做一些很酷的事情与AJAX在ASP.NET MVC项目的一部分。我打算一旦完成后在我的网站上发布代码,以便其他人可以像我一样学习。我倾向于发现JQuery有很多例子 - > PHP - > MySQL是开源的堆栈。但是对于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> 
+0

你的知识Eilon的泉源!再次感谢您的帮助! – 2010-06-20 19:29:35

0

你有两个选择。将该javascript添加到图库视图中,以便在部分视图加载时运行,或者更好的解决方案是@Eilon刚刚在那里获得的解决方案。

+0

我试过在部分视图中包含脚本,但在加载时不执行。我读过Phil Haack写的一篇文章,他说当一个部分传回AJAX请求时,Framework不会执行脚本。他的文章说使用JQuery .live(),但我无法使它工作。 Eilon的解决方案的工作原理非常简单。 谢谢, 乔恩 – 2010-06-20 19:24:32