在更新面板中包装转发器后,页面仍会刷新

时间:2010-12-02 22:27:32

标签: c# javascript asp.net ajax webforms

我有两个SqlDataSources和两个Repeater,每个转发器包含一个超链接(我也尝试使用Web服务器按钮和锚点)。

超链接从数据库中获取一些值,在NavigationUrl属性中我使用string.Format方法创建参数化url,为浏览器传递,然后根据url中传递的值填充第二个中继器最初由第一个转发器的超链接传递

这是我的示例代码:https://gist.github.com/726213

<asp:ScriptManager id="Scrptmanagr"  runat="server"></asp:ScriptManager>
<asp:UpdatePanel id="updtpanl" runat="server">
    <ContentTemplate>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
            SelectCommand="SELECT [arrange_by_id], [arrange_by] FROM [arrange_by]">
        </asp:SqlDataSource>
        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <asp:HyperLink ID="HyperLink3" NavigateUrl='<%# string.Format("{0}?SortingType={1}",Request.AppRelativeCurrentExecutionFilePath, Eval("arrange_by_id"))%>' runat="server"><%# Eval("arrange_by") %></asp:HyperLink>
            </ItemTemplate>
            <SeparatorTemplate>
                |
            </SeparatorTemplate>
        </asp:Repeater>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
            SelectCommand="SELECT [alphabet_id],[arrange_by_id], [value] FROM [alphabet] WHERE ([arrange_by_id] = @arrange_by_id)">
            <SelectParameters>
                <asp:QueryStringParameter Name="arrange_by_id" QueryStringField="SortingType" Type="Int32" DefaultValue="1" />
            </SelectParameters>
        </asp:SqlDataSource>
        <br /><br />
        <asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSource2">
            <ItemTemplate>
                <asp:HyperLink  ID="hyper1" runat="server" NavigateUrl='<%#string.Format("{0}?SortingType={1}&SortBy={2}",Request.AppRelativeCurrentExecutionFilePath, Eval("arrange_by_id"),Eval("value"))%>'><%# Eval("value")%></asp:HyperLink>
            </ItemTemplate>
            <SeparatorTemplate>
                |
            </SeparatorTemplate>
        </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>

现在!每次我点击任何超链接,它会导致完整的帖子返回并刷新页面!我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

非常确定<asp:HyperLink>不会让您获得部分更新,它会将HTML呈现为<a href="..">标记。您需要一个实际导致回发的控件,<asp:Button><asp:LinkButton>

答案 1 :(得分:1)

首先,您要传回的任何值都不使用查询字符串,而是使用相同的页面。 将内容放在隐藏字段或按钮CommandArgument

<asp:HiddenField ID="hdnFieldName" Value='<%# Eval("columnName") %>' runat="server" />

然后在

后面的命令
    protected void rptName_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if(e.CommandName.Equals("ButtonCommandName"))
        {
            RepeaterItem objItem = e.Item;
            var objFieldValue = (HiddenField)objItem.FindControl("hdnFieldName"); 
        }
    }

请记住设置更新面板Mode =“conditional”,这将导致updatepanel仅在发生以下任一情况时更新:

1)如果updatepanel中的控件导致回发,例如asp.net按钮。

2)如果更新面板上出现触发器(关于触发器:http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-updatepanel-triggers

3)最后如果调用“Update()”方法

否则,它将不会更新和刷新。当它设置为always时,updatepanel或其他updatepanel之外的任何回发都可以触发updatepanel刷新。