Eval 方法在回发后不保存结果

Posted

技术标签:

【中文标题】Eval 方法在回发后不保存结果【英文标题】:Eval method don't save results after postback 【发布时间】:2018-04-22 15:53:57 【问题描述】:

我正在尝试修复 WEB 表单 (.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>

我该如何解决这个问题?

我可以用其他 html 保存 Eval() 的结果还是可以重新渲染它?

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: 发布数据:

 <asp:Button ID="SubmitVacancyFormImageButton" class="questionary___submit" CausesValidation="true" Text="Отправить анкету" runat="server" OnClick="SubmitVacancyFormImageButton_Click" />

【问题讨论】:

什么是用数据填充该控件?该操作是否未在该特定回发上执行? "什么是用数据填充该控件?" - 几个文本字段和一个来自用户的文件 你能说得更具体点吗?在代码中,该数据在哪里/如何具体应用于该控件?回发时是否会发生相同的操作? DataSource="&lt;%#Container.DataItem %&gt;" 从哪里获取数据? 更新帖子... 【参考方案1】:

好的,我的问题解决方法是在页面加载时调用 ListView.DataBind

<body>
    <%= ListView1.DataReBind()%>

扩展类是:

public static class ObjectDataSourceHelper
    
        public static string DataReBind(this ListView lv)
        
            lv.DataBind();
            return string.Empty;
        
    

【讨论】:

以上是关于Eval 方法在回发后不保存结果的主要内容,如果未能解决你的问题,请参考以下文章

回发后jquery datepicker不起作用

为啥我动态添加的控件在回发后会丢失它们的值?

RadDatePicker 和 RadTimePicker 在回发后失去样式

在回发后重新选择

更新面板内的jquery datepicker在回发后消失

文本框文本在回发后消失