2011-05-25 16 views
0

私はthis questionとよく似た問題があります。ポストバックの原因となるページのドロップダウンがあり、その間にASP:ImageImageUrlプロパティが変更されています。そのポストバックが発生すると、FileUploadにある値はすべてクリアされます。それは私が解決しようとしている問題ですが、私はこの問題に直面しました。UpdatePanel非同期ポストバックでコンテンツが更新されない

私はUpdatePanelのドロップダウンとイメージを折り返して問題を解決しようとしています。ここに私のASPのマークアップは次のとおりです。

<asp:UpdatePanel ID="upPanel" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="myDropdown" 
      EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <tr valign="top"> 
     <td>Tag:</td> 
     <td> 
      <asp:DropDownList ID="myDropdown" runat="server" 
         AppendDataBoundItems="true" DataTextField="Name" 
         DataValueField="ID" AutoPostBack="true"> 
       <asp:ListItem Value="" /> 
      </asp:DropDownList> 
     </td> 
     </tr> 
     <TR vAlign="top"> 
     <TD width="150">Thumbnail:</TD> 
     <TD> 
       <asp:Image id="imgThumbnail" Runat="server" 
        AlternateText="No Image Found" 
        Visible="false"></asp:Image><BR> 
     </TD> 
     </TR> 
    </ContentTemplate> 
</asp:UpdatePanel> 

EDIT:私のコードビハインド更新をやってここにある:

Private Sub myDropdown_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myDropdown.SelectedIndexChanged 
     If (myDropdown.SelectedValue <> "-1") Then 
      imgThumbnail.ImageUrl = Application("AppPath") + "/Modules/Broadcaster/ImageGen.ashx?tag=" + myDropdown.SelectedValue 
     Else 
      imgThumbnail.ImageUrl = Application("AppPath") + "/Modules/Broadcaster/ImageGen.ashx?defaultTag=" + _modID.ToString() 
     End If 
End Sub 

私は非同期ポストバックが放火犯で起こって見ることができますが、画像のURLは変更されません。私は間違って何をしていますか?

答えて

0

更新を実行しているコード(ドロップダウン内で選択したインデックスによって呼び出されるコード)がありません。しかし、プログラムではなくコントロールを使用してDDLをロードするため、問題が発生していると推測しています。

この問題に遭遇した理由は、データソースコントロールに値が入力される前にページロード関数が呼び出されたためです。つまり、値を探しているときにDDLが設定されていないことになります。空になる。

例:そこには値がないか、インデックスが瞬間ページのロードを選択したため

Dim sTemp As String = "images/myimagenumber" & myDropdown.SelectedIndex & ".jpg" 

これはSTEMP文字列の値として、「画像/ myimagenumber.jpg」を返します。

ドロップダウンリストの値を手動で(プログラムで)ロードしてから、page_loadサブルーチンで最初にページが読み込まれたときにドロップダウンリストを再作成するようにしてください。

VB.Net例:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    If Page.IsPostback = False Then 
      runDBLFillSubHere() 
    End If 

    'Run Rest of Code Here' 
Sub 

私は長年にわたって、この数回に実行したと私はそれをアクセスしていますが前に、DDLが移入されませんので、それが常になってしまいます。

+0

VBコードビハインドを追加する質問を編集しました。更新パネルを追加する前にこれはうまくいきました。 UpdatePanelを追加する前にうまくいきました。非同期ポストバックでドロップダウンが正しく設定されないと言っていますか?いずれにせよ、私はddlのchange()イベントでjQueryを使ってイメージパスを変更することでこれを解決しました。この質問は今好奇心の詳細です。 –

+0

正しい。非同期ポストバックは、page_load関数が呼び出される前に(ポストバックのタイプに関係なくページがロードされるたびに呼び出されるため)DDLにデータを入力していないようです。 jQueryは常にオプションです。しかし、私は通常、できるだけ多くのコードをコードビハインドに保存しようとしています。これが、私がこれらの問題に遭遇したときの解決策を考え出した理由です。 – akuta

関連する問題