Eval 方法在回发后不保存结果
Eval method don't save results after postback
我正在尝试修复 WEB FORMS (.Net 4) 上遗留项目中的错误。
我在 Layout.master(页面布局)有一些逻辑,使用这样的控件:
<uc4:FooterCharity ID="NewsItemUserControl1" DataSource="<%#Container.DataItem %>" runat="server" />
并且此控件像这样使用 Eval():
<li class="footer__sponsor-item carousel-block">
<a href="/sponsory/<%# Eval("PathInfo")%>/">
<img src="<%# Eval("Image")%>" style="width: 198px; height: 148px;"/>
</a>
</li>
并且在页面上我使用了一些其他发送回发的控件(提交按钮)。
重新加载页面后,所有呈现的控件都有相同的 html,但是 没有 Eval() 函数的结果
html 回发前:
<li class="footer__sponsor-item carousel-block">
<a href="/sponsory/rossijskaja-futbolnaja-premier-liga/">
<img src="/img/Sponsors/rfpl.png" style="width: 198px; height: 148px;">
</a>
</li>
html 回发后:
<li class="footer__sponsor-item carousel-block">
<a href="/sponsory//">
<img src="" style="width: 198px; height: 148px;">
</a>
</li>
我该如何解决这个问题?
我可以将 Eval() 的结果与其他 html 一起保存吗?或者我可以重新渲染它吗?
UPD:
控件数据从这里获取:
<asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1" EnableModelValidation="true">
<LayoutTemplate>
<ul class='footer__sponsor-list'>
<li runat="server" id="itemPlaceholder" class="footer__sponsor-item" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<uc4:FooterCharity ID="NewsItemUserControl1" DataSource="<%#Container.DataItem %>" runat="server" />
</ItemTemplate>
<AlternatingItemTemplate>
<uc4:FooterCharity ID="NewsItemUserControl1" DataSource="<%#Container.DataItem %>" runat="server" />
</AlternatingItemTemplate>
</asp:ListView>
...
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="LigaStavokShops.DataAccessObject.SponsorMapper" SelectMethod="GetSponsors"></asp:ObjectDataSource>
如果我放置断点,我会看到它被调用了一次 - 在第一次页面加载时,但在回发之后没有调用(呈现控制和 GetSponsors)
UPD2:
Post数据:
<asp:Button ID="SubmitVacancyFormImageButton" class="questionary___submit" CausesValidation="true" Text="Отправить анкету" runat="server" OnClick="SubmitVacancyFormImageButton_Click" />
好的,我的解决方法是在页面加载时调用 ListView.DataBind:
<body>
<%= ListView1.DataReBind()%>
扩展名 class 是:
public static class ObjectDataSourceHelper
{
public static string DataReBind(this ListView lv)
{
lv.DataBind();
return string.Empty;
}
}
我正在尝试修复 WEB FORMS (.Net 4) 上遗留项目中的错误。 我在 Layout.master(页面布局)有一些逻辑,使用这样的控件:
<uc4:FooterCharity ID="NewsItemUserControl1" DataSource="<%#Container.DataItem %>" runat="server" />
并且此控件像这样使用 Eval():
<li class="footer__sponsor-item carousel-block">
<a href="/sponsory/<%# Eval("PathInfo")%>/">
<img src="<%# Eval("Image")%>" style="width: 198px; height: 148px;"/>
</a>
</li>
并且在页面上我使用了一些其他发送回发的控件(提交按钮)。
重新加载页面后,所有呈现的控件都有相同的 html,但是 没有 Eval() 函数的结果
html 回发前:
<li class="footer__sponsor-item carousel-block">
<a href="/sponsory/rossijskaja-futbolnaja-premier-liga/">
<img src="/img/Sponsors/rfpl.png" style="width: 198px; height: 148px;">
</a>
</li>
html 回发后:
<li class="footer__sponsor-item carousel-block">
<a href="/sponsory//">
<img src="" style="width: 198px; height: 148px;">
</a>
</li>
我该如何解决这个问题?
我可以将 Eval() 的结果与其他 html 一起保存吗?或者我可以重新渲染它吗?
UPD: 控件数据从这里获取:
<asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1" EnableModelValidation="true">
<LayoutTemplate>
<ul class='footer__sponsor-list'>
<li runat="server" id="itemPlaceholder" class="footer__sponsor-item" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<uc4:FooterCharity ID="NewsItemUserControl1" DataSource="<%#Container.DataItem %>" runat="server" />
</ItemTemplate>
<AlternatingItemTemplate>
<uc4:FooterCharity ID="NewsItemUserControl1" DataSource="<%#Container.DataItem %>" runat="server" />
</AlternatingItemTemplate>
</asp:ListView>
...
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="LigaStavokShops.DataAccessObject.SponsorMapper" SelectMethod="GetSponsors"></asp:ObjectDataSource>
如果我放置断点,我会看到它被调用了一次 - 在第一次页面加载时,但在回发之后没有调用(呈现控制和 GetSponsors)
UPD2: Post数据:
<asp:Button ID="SubmitVacancyFormImageButton" class="questionary___submit" CausesValidation="true" Text="Отправить анкету" runat="server" OnClick="SubmitVacancyFormImageButton_Click" />
好的,我的解决方法是在页面加载时调用 ListView.DataBind:
<body>
<%= ListView1.DataReBind()%>
扩展名 class 是:
public static class ObjectDataSourceHelper
{
public static string DataReBind(this ListView lv)
{
lv.DataBind();
return string.Empty;
}
}