ASP UpdatePanel 内的砌体布局
Masonry Layout inside ASP UpdatePanel
我在我的 ASP-WebPage 上使用带有下拉列表和输出的 UpdatePanel-Div 用于在 CodeBehind 中生成的卡片,由 Masonry 布局。输出绑定到下拉列表。
在 PageLoad 上,Masonry-Layout 运行 很好。当 Dropdown 更改时,布局丢失,卡片之间有空格。
我试过在output-div改变后启动masonry-object的布局方法。似乎 运行 不在 UpdatePanel 中。
谁能给我一个冲动,我怎么能意识到,在更新面板发生变化后,砌体布局再次发挥作用?
这就是我的使用方式:
<asp:ScriptManager runat="server" EnablePageMethods="false"/>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:DropDownList OnSelectedIndexChanged="ddKat_SelectedIndexChanged" OnDataBound="ddKat_DataBound" ID="ddKat" CssClass="form-control" runat="server" DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="id" AutoPostBack="true">
</asp:DropDownList>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString='<%$ ConnectionStrings:comidosDElocalConnectionString %>' SelectCommand="SELECT [id], [name] FROM [kategorien] order by name"></asp:SqlDataSource>
<div class="wrapper" id="wrapper">
<!-- Start Blog Masonry Area -->
<section class="blog__masonery__area bg--white section-padding--lg">
<div class="container blog__masonry__container">
<div class="row blog__masonery__wrap" id="ausgabe" runat="server">
</div>
</div>
</section>
<!-- End Blog Masonry Area -->
</div><!-- //Main wrapper -->
</ContentTemplate>
</asp:UpdatePanel>
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
List<kategorien> listeKategorien = myKATEGORIE.holeKategorienMitContent();
foreach (var item in listeKategorien)
{
ausgabeNav.Controls.Add(erzeugeNavZuKategorie_id(item));
}
}
}
protected void ddKat_SelectedIndexChanged(object sender, EventArgs e)
{
bestückeAusgabeCards();
}
private void bestückeAusgabeCards()
{
List<FREE.konzepte> listeDBfürDROPDOWN = new List<FREE.konzepte>();
using (comidosDElocalEntities context = new comidosDElocalEntities())
{
listeDBfürDROPDOWN = context.konzepte.ToList();
}
foreach (var item in listeDBfürDROPDOWN)
{
if (item.kategorie_id.ToString() == ddKat.SelectedValue)
{
// 1. VERSION
// ausgabeCards.Controls.Add(erzeugeCard(item));
// ". VERSION: MASONRY
ausgabe.Controls.Add(erzeugeBlogEintragMasonry(item));
}
}
}
public static HtmlGenericControl erzeugeBlogEintragMasonry(konzepte konzeptItem)
{
HtmlGenericControl rückgabe = new HtmlGenericControl("div");
rückgabe.Style["padding-bottom"] = "10px";
rückgabe.Attributes["class"] = "col-lg-4 col-md-6 col-sm-12 bl__item cat--1";
HtmlGenericControl zweitesDiv = new HtmlGenericControl("div");
zweitesDiv.Attributes["class"] = "blog__masonry foo";
HtmlGenericControl bildBereich = new HtmlGenericControl("div");
bildBereich.Attributes["class"] = "bl__maso__thumb";
HtmlGenericControl linkUmBild = new HtmlGenericControl("a");
linkUmBild.Attributes["href"] = konzeptItem.startseitePfad;
HtmlGenericControl bild = new HtmlGenericControl("img");
bild.Attributes["src"] = konzeptItem.bildPfad;
bild.Attributes["alt"] = konzeptItem.überschrift;
bild.Attributes["title"] = konzeptItem.überschrift;
linkUmBild.Controls.Add(bild);
bildBereich.Controls.Add(linkUmBild);
zweitesDiv.Controls.Add(bildBereich);
HtmlGenericControl textBereich = new HtmlGenericControl("div");
textBereich.Attributes["class"] = "bl__mass__content";
HtmlGenericControl titel = new HtmlGenericControl("h4");
titel.Style["line-height"] = "auto";
titel.Style["text-align"] = "center";
titel.Style["font-weight"] = "bold";
titel.Style["padding-top"] = "5px";
titel.InnerHtml = konzeptItem.überschrift;
textBereich.Controls.Add(titel);
HtmlGenericControl p = new HtmlGenericControl("p");
p.InnerHtml = konzeptItem.beschreibung;
p.Style["text-align"] = "center";
textBereich.Controls.Add(p);
zweitesDiv.Controls.Add(textBereich);
// LINKS
HtmlGenericControl linkBereich = new HtmlGenericControl("div");
linkBereich.Attributes["class"] = "linkBereich";
linkBereich.Style["text-align"] = "center";
HtmlGenericControl linkEins = new HtmlGenericControl("a");
linkEins.Style["display"] = "inline-block";
linkEins.Style["margin-bottom"] = "5px";
linkEins.Attributes["target"] = "_blank";
linkEins.Attributes["href"] = konzeptItem.startseitePfad;
linkEins.InnerHtml = "zur Live-Vorschau";
linkEins.Attributes["class"] = "btn btn-primary blogLink";
linkEins.Attributes["title"] = "zur Live-Vorschau";
linkBereich.Controls.Add(linkEins);
zweitesDiv.Controls.Add(linkBereich);
rückgabe.Controls.Add(zweitesDiv);
return rückgabe;
}
有没有意见在某些事件中调用 Masonry 的布局方法,即在更新面板更改时触发。或者当输出-div 在更新面板内发生变化时调用客户端代码的任何其他意见?
当您使用 UpdatePanel 时,其中的所有内容都会刷新,这会更改 DOM 以及对其进行的所有绑定。所以你需要再次执行 jQuery 来重新创建 Masonry。
将他的代码放在某个地方,它将起作用。
<script>
var prm = Sys.WebForms.PageRequestManager.getInstance();
//when the updatepanel is finished reloading
prm.add_endRequest(function () {
initMyMasonry();
});
//the normal first time page load
initMyMasonry();
function initMyMasonry() {
//crteate your masonry here
}
</script>
我在我的 ASP-WebPage 上使用带有下拉列表和输出的 UpdatePanel-Div 用于在 CodeBehind 中生成的卡片,由 Masonry 布局。输出绑定到下拉列表。
在 PageLoad 上,Masonry-Layout 运行 很好。当 Dropdown 更改时,布局丢失,卡片之间有空格。
我试过在output-div改变后启动masonry-object的布局方法。似乎 运行 不在 UpdatePanel 中。
谁能给我一个冲动,我怎么能意识到,在更新面板发生变化后,砌体布局再次发挥作用?
这就是我的使用方式:
<asp:ScriptManager runat="server" EnablePageMethods="false"/>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:DropDownList OnSelectedIndexChanged="ddKat_SelectedIndexChanged" OnDataBound="ddKat_DataBound" ID="ddKat" CssClass="form-control" runat="server" DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="id" AutoPostBack="true">
</asp:DropDownList>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString='<%$ ConnectionStrings:comidosDElocalConnectionString %>' SelectCommand="SELECT [id], [name] FROM [kategorien] order by name"></asp:SqlDataSource>
<div class="wrapper" id="wrapper">
<!-- Start Blog Masonry Area -->
<section class="blog__masonery__area bg--white section-padding--lg">
<div class="container blog__masonry__container">
<div class="row blog__masonery__wrap" id="ausgabe" runat="server">
</div>
</div>
</section>
<!-- End Blog Masonry Area -->
</div><!-- //Main wrapper -->
</ContentTemplate>
</asp:UpdatePanel>
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
List<kategorien> listeKategorien = myKATEGORIE.holeKategorienMitContent();
foreach (var item in listeKategorien)
{
ausgabeNav.Controls.Add(erzeugeNavZuKategorie_id(item));
}
}
}
protected void ddKat_SelectedIndexChanged(object sender, EventArgs e)
{
bestückeAusgabeCards();
}
private void bestückeAusgabeCards()
{
List<FREE.konzepte> listeDBfürDROPDOWN = new List<FREE.konzepte>();
using (comidosDElocalEntities context = new comidosDElocalEntities())
{
listeDBfürDROPDOWN = context.konzepte.ToList();
}
foreach (var item in listeDBfürDROPDOWN)
{
if (item.kategorie_id.ToString() == ddKat.SelectedValue)
{
// 1. VERSION
// ausgabeCards.Controls.Add(erzeugeCard(item));
// ". VERSION: MASONRY
ausgabe.Controls.Add(erzeugeBlogEintragMasonry(item));
}
}
}
public static HtmlGenericControl erzeugeBlogEintragMasonry(konzepte konzeptItem)
{
HtmlGenericControl rückgabe = new HtmlGenericControl("div");
rückgabe.Style["padding-bottom"] = "10px";
rückgabe.Attributes["class"] = "col-lg-4 col-md-6 col-sm-12 bl__item cat--1";
HtmlGenericControl zweitesDiv = new HtmlGenericControl("div");
zweitesDiv.Attributes["class"] = "blog__masonry foo";
HtmlGenericControl bildBereich = new HtmlGenericControl("div");
bildBereich.Attributes["class"] = "bl__maso__thumb";
HtmlGenericControl linkUmBild = new HtmlGenericControl("a");
linkUmBild.Attributes["href"] = konzeptItem.startseitePfad;
HtmlGenericControl bild = new HtmlGenericControl("img");
bild.Attributes["src"] = konzeptItem.bildPfad;
bild.Attributes["alt"] = konzeptItem.überschrift;
bild.Attributes["title"] = konzeptItem.überschrift;
linkUmBild.Controls.Add(bild);
bildBereich.Controls.Add(linkUmBild);
zweitesDiv.Controls.Add(bildBereich);
HtmlGenericControl textBereich = new HtmlGenericControl("div");
textBereich.Attributes["class"] = "bl__mass__content";
HtmlGenericControl titel = new HtmlGenericControl("h4");
titel.Style["line-height"] = "auto";
titel.Style["text-align"] = "center";
titel.Style["font-weight"] = "bold";
titel.Style["padding-top"] = "5px";
titel.InnerHtml = konzeptItem.überschrift;
textBereich.Controls.Add(titel);
HtmlGenericControl p = new HtmlGenericControl("p");
p.InnerHtml = konzeptItem.beschreibung;
p.Style["text-align"] = "center";
textBereich.Controls.Add(p);
zweitesDiv.Controls.Add(textBereich);
// LINKS
HtmlGenericControl linkBereich = new HtmlGenericControl("div");
linkBereich.Attributes["class"] = "linkBereich";
linkBereich.Style["text-align"] = "center";
HtmlGenericControl linkEins = new HtmlGenericControl("a");
linkEins.Style["display"] = "inline-block";
linkEins.Style["margin-bottom"] = "5px";
linkEins.Attributes["target"] = "_blank";
linkEins.Attributes["href"] = konzeptItem.startseitePfad;
linkEins.InnerHtml = "zur Live-Vorschau";
linkEins.Attributes["class"] = "btn btn-primary blogLink";
linkEins.Attributes["title"] = "zur Live-Vorschau";
linkBereich.Controls.Add(linkEins);
zweitesDiv.Controls.Add(linkBereich);
rückgabe.Controls.Add(zweitesDiv);
return rückgabe;
}
有没有意见在某些事件中调用 Masonry 的布局方法,即在更新面板更改时触发。或者当输出-div 在更新面板内发生变化时调用客户端代码的任何其他意见?
当您使用 UpdatePanel 时,其中的所有内容都会刷新,这会更改 DOM 以及对其进行的所有绑定。所以你需要再次执行 jQuery 来重新创建 Masonry。
将他的代码放在某个地方,它将起作用。
<script>
var prm = Sys.WebForms.PageRequestManager.getInstance();
//when the updatepanel is finished reloading
prm.add_endRequest(function () {
initMyMasonry();
});
//the normal first time page load
initMyMasonry();
function initMyMasonry() {
//crteate your masonry here
}
</script>