fancybox 不适用于除第一页之外的 aspxgridview 页面
fancybox is not working for aspxgridview pages except first page
我在 Aspxgridview 的页面上使用了 fancybox。在第一个网格页面中,它工作正常。当我单击网格的其他页面时,fancybox 不起作用并且 url 在新选项卡中打开。我想在 fancybox 弹出窗口中打开超链接 urls。可能是什么问题?
<script type="text/javascript">
$(document).ready(function () {
$('.fancybox').fancybox({
openEffect: 'none',
closeEffect: 'none',
showCloseButton: true,
titleShow: true,
transitionIn: 'elastic',
transitionOut: 'elastic',
width: '80%',
heigh: '80%',
autoScale: true,
type: 'iframe',
onClosed: function() {
location.reload();
return;
}
});
});
</script>
...
<dx:ASPxGridView ID="gridDX" ClientInstanceName="grid" runat="server" KeyFieldName="ID" OnDataBinding="gridDX_DataBinding" AutoGenerateColumns="False" OnPageIndexChanged="gridDX_PageIndexChanged">
<Columns>
<dx:GridViewDataColumn FieldName="Edit" Caption="View" VisibleIndex="1">
<DataItemTemplate>
<dx:ASPxHyperLink CssClass="fancybox" ID="hypShowEdit" ClientInstanceName="hypShowEdit" runat="server" ImageUrl="~/img/edit.png" Text="Show/Edit" NavigateUrl="Documents.aspx">
</dx:ASPxHyperLink>
</DataItemTemplate>
</dx:GridViewDataColumn>
</Columns>
</dx:ASPxGridView>
此外,我还有一个 pageindexchanged 方法:
protected void gridDX_PageIndexChanged(object sender, EventArgs e)
{
var view = sender as ASPxGridView;
if (view == null) return;
var pageIndex = view.PageIndex;
gridDX.PageIndex = pageIndex;
}
您必须了解,当您编写 $('.your selector').fancybox()
之类的代码时,您是在与您的选择器匹配的页面上当前存在的元素上附加启动 fancybox 的点击事件。这意味着,如果您重新加载页面(或页面的一部分)以便用新元素替换当前元素,则必须再次调用 .fancybox()
。
将 fancybox 初始化提取到一个单独的方法中,并在 ASPxClientGridView.Init(不是 jQuery document.ready)和 EndCallback 事件中调用它。
查看有关此的 Using jQuery / jQuery UI libraries with DevExpress ASP.NET Controls / MVC Extensions 指南。
//$(document).ready(function () {
function InitFancyBox() {
$('.fancybox').fancybox({
openEffect: 'none',
closeEffect: 'none',
showCloseButton: true,
titleShow: true,
transitionIn: 'elastic',
transitionOut: 'elastic',
width: '80%',
heigh: '80%',
autoScale: true,
type: 'iframe',
onClosed: function() {
location.reload();
return;
}
});
}
//});
<dx:ASPxGridView ...>
<Columns>
<dx:GridViewDataColumn ...>
<DataItemTemplate>
<dx:ASPxHyperLink CssClass="fancybox" ...>
</dx:ASPxHyperLink>
</DataItemTemplate>
</dx:GridViewDataColumn>
</Columns>
<ClientSideEvents Init="InitFancyBox" EndCallback="InitFancyBox" />
</dx:ASPxGridView>
我在 Aspxgridview 的页面上使用了 fancybox。在第一个网格页面中,它工作正常。当我单击网格的其他页面时,fancybox 不起作用并且 url 在新选项卡中打开。我想在 fancybox 弹出窗口中打开超链接 urls。可能是什么问题?
<script type="text/javascript">
$(document).ready(function () {
$('.fancybox').fancybox({
openEffect: 'none',
closeEffect: 'none',
showCloseButton: true,
titleShow: true,
transitionIn: 'elastic',
transitionOut: 'elastic',
width: '80%',
heigh: '80%',
autoScale: true,
type: 'iframe',
onClosed: function() {
location.reload();
return;
}
});
});
</script>
...
<dx:ASPxGridView ID="gridDX" ClientInstanceName="grid" runat="server" KeyFieldName="ID" OnDataBinding="gridDX_DataBinding" AutoGenerateColumns="False" OnPageIndexChanged="gridDX_PageIndexChanged">
<Columns>
<dx:GridViewDataColumn FieldName="Edit" Caption="View" VisibleIndex="1">
<DataItemTemplate>
<dx:ASPxHyperLink CssClass="fancybox" ID="hypShowEdit" ClientInstanceName="hypShowEdit" runat="server" ImageUrl="~/img/edit.png" Text="Show/Edit" NavigateUrl="Documents.aspx">
</dx:ASPxHyperLink>
</DataItemTemplate>
</dx:GridViewDataColumn>
</Columns>
</dx:ASPxGridView>
此外,我还有一个 pageindexchanged 方法:
protected void gridDX_PageIndexChanged(object sender, EventArgs e)
{
var view = sender as ASPxGridView;
if (view == null) return;
var pageIndex = view.PageIndex;
gridDX.PageIndex = pageIndex;
}
您必须了解,当您编写 $('.your selector').fancybox()
之类的代码时,您是在与您的选择器匹配的页面上当前存在的元素上附加启动 fancybox 的点击事件。这意味着,如果您重新加载页面(或页面的一部分)以便用新元素替换当前元素,则必须再次调用 .fancybox()
。
将 fancybox 初始化提取到一个单独的方法中,并在 ASPxClientGridView.Init(不是 jQuery document.ready)和 EndCallback 事件中调用它。
查看有关此的 Using jQuery / jQuery UI libraries with DevExpress ASP.NET Controls / MVC Extensions 指南。
//$(document).ready(function () {
function InitFancyBox() {
$('.fancybox').fancybox({
openEffect: 'none',
closeEffect: 'none',
showCloseButton: true,
titleShow: true,
transitionIn: 'elastic',
transitionOut: 'elastic',
width: '80%',
heigh: '80%',
autoScale: true,
type: 'iframe',
onClosed: function() {
location.reload();
return;
}
});
}
//});
<dx:ASPxGridView ...>
<Columns>
<dx:GridViewDataColumn ...>
<DataItemTemplate>
<dx:ASPxHyperLink CssClass="fancybox" ...>
</dx:ASPxHyperLink>
</DataItemTemplate>
</dx:GridViewDataColumn>
</Columns>
<ClientSideEvents Init="InitFancyBox" EndCallback="InitFancyBox" />
</dx:ASPxGridView>