2010-12-02 20 views
2

2つのSqlDataSourceと2つのリピータがあり、それぞれのリピータにハイパーリンクが1つあります(Webサーバーのボタンとアンカーを使用して試しました)。更新パネルでリピータをラップした後もページが更新されます

ハイパーリンクはデータベースからいくつかの値をフェッチし、NavigationUrlプロパティで私はstring.Formatメソッドを使用してパラメータ化されたURLを作成し、ブラウザに渡してから、2番目のリピータが元の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

確かに<asp:HyperLink>は部分的な更新を得られませんが、<a href="..">タグとしてHTMLにレンダリングされます。実際にポストバックが発生するコントロールが必要です(または<asp:LinkButton>)。

+0

残念ながら私はasp.netボタンを使って試してみましたが、それでも同じです! lKashef

+1

そこにPostBackUrlを入れないでください!あなたはあなたの現在のページにポストバックしないように強制しているので、部分的なアップデートにラップすることはできません。 OnClickイベントで ''を実行してください!代わりに、URLにすべてがあるというアプローチに執着しているなら、 ''ではなく 'iframe'だけを使う方が良いでしょうか? – Carson63000

+0

私はどんなアプローチにも執着していません。 URLにパラメータを渡すことを提案したら、それを共有してください!よりよいアプローチを学ぶことができれば幸いです。 – lKashef

1

最初に返す値は、同じページのクエリ文字列を使用しません。

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

背後COMANDに続い 置き隠しフィールドの内容やボタンCommandArgument

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

そして、これが唯一のアップデートにUpdatePanelの原因となります「= "条件付きの更新パネルのモードを設定することを忘れないでください次のいずれかが発生したとき:。

1)のUpdatePanel内のコントロールがポストバック例えばasp.netボタンが発生した場合

2)のUpdatePanelのトリガーがトリガーについて(発生した場合:「アップデート()」メソッドは

と呼ばれる最後場合http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-updatepanel-triggers

3)それ以外の場合は、更新し、更新されません。 alwaysをalwaysに設定すると、updatepanelまたは別のupdatepanelの外部にあるポストバックによって、更新パネルがリフレッシュされます。

+1

Okニック、それは意味があります。だから、私は2番目のリピータの値を内部的にクエリーストリングを通して渡します(ごめんなさい!私はqueryStringsを間違って使用しました:S)。特別な並べ替えのため、どのように名前でソートされたページを "bookmarkable"のようにすることができますか? 他にもう一つ!私はcommandArgumentを使いたいと思ったらコードを取得しませんし、2番目のリピータのデータソースにはどのようなコードを使用していますか?どのコントロールを使用するかを指定することができないため、どこのパラメータ値のソースとして何を選択するのかわからない、 – lKashef

関連する問題