9

更新パネル内に画像コントロールがあり、ページの読み込みでその URL を設定しています。

page_load のコードビハインド

string url = "example.com";
Image1.ImageUrl = url;

aspx の updatepanel 内

<asp:Image ID="Image1" runat="server" CssClass="image" />

また、更新パネル内にいくつかの送信ボタンがあり、ボタンのクリックでいくつかのテックスボックスとラベルを更新しています。

ただし、これによりページ全体が更新されます。(スクロールバーが上がります。)

画像を更新パネルの外に移動すると、これは起こりません。問題は、更新パネルの外側の画像を削除すると、レイアウトがまったく機能しないことです。誰でもこれで私を助けることができますか?ありがとう。

アップデート

これはChromeでのみ発生することに気付きました。誰にもアイデアはありますか?

更新 2 そのページで、更新パネルから img を削除することで問題を解決しました。レイアウト作業を行うのは地獄でしたが、うまくいきました。

ただし、別のページがあり、ユーザーがクリックしてさらに読み込むと、更新パネルに新しい imgs を追加しています。同じ取引で、明らかに、今回は更新パネルから画像を移動できません。これがコードです。

  <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

        <!--Recent Uploads-->
        <div class="uploads">
            <h2>Uploads</h2>
            <asp:UpdatePanel ID="RecentUpload" runat="server" UpdateMode="Conditional">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="loaduploads"/>
                </Triggers>
                <ContentTemplate>
                    <asp:Button CssClass="uploadButton" ID="loaduploads" runat="server" Text="Load More" OnClick="loaduploads_Click" />
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>

コード ビハインド (アップロード インデックスはセッション変数)

upload_index += 5;
        for (int i = 0; i < upload_index; i++)
        {
            try
            {
                SSImage img = images[i];
                HyperLink imglink = new HyperLink();
                imglink.NavigateUrl = "/Image.aspx?id=" + img.id;
                imglink.ImageUrl = "/ShowImage.ashx?imgid=" + img.id;
                imglink.ToolTip = img.title;
                imglink.CssClass = "imgupload";
                Control contentpanel = RecentUpload.ContentTemplateContainer;
                contentpanel.Controls.AddAt(contentpanel.Controls.Count - 2, imglink);
            }
            catch (ArgumentOutOfRangeException)
            {
                loaduploads.Visible = false;
                break;
            }
        }

更新 3

この問題は静的画像では発生せず、showimage.ashx. これがコードです。

<%@ WebHandler Language="C#" Class="ShowImage" %>

using System;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public class ShowImage : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        SqlDataReader rdr = null;
        SqlConnection conn = new SqlConnection();
        SqlCommand cmd = new SqlCommand();

        try
        {
            string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            conn = new SqlConnection(connStr);

            cmd = new SqlCommand("SELECT Image_data FROM [Image_table] WHERE Image_id = " + context.Request.QueryString["imgID"], conn);
            conn.Open();
            Object result = cmd.ExecuteScalar();
            //if nothing found throw exception
            if (result == null)
            {
                throw new Exception();
            }
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                context.Response.ContentType = "image/jpg";
                context.Response.BinaryWrite((byte[])rdr["Image_data"]);
            }

            if (rdr != null)
                rdr.Close();
        }
        catch
        {

        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}
4

3 に答える 3

2

更新パネルの非同期ポスト バック トリガーを使用する必要があります。次に例を示します。

<asp:AsyncPostBackTrigger ControlID="" EventName=""/>

ここで、「controlID」はポストバックを引き起こす可能性のある要素の ID であり、「eventname」はポストバックを引き起こすために定義されたコントロールによって起動される特定のイベントです。

于 2013-04-30T13:00:43.007 に答える
1

私の意見では、

を更新する代わりに、ボディにコントロールを追加するようにしてくださいContentTemplate。つまり、ContentTemplate でコントロールをUpdatePanel作成し、その中にすべてを追加して、.PanelPanelContentTemplate

Panelに含まれているコントロールを追加することを示すロジックと aspx 構文を確認してくださいUpdatePanel > ContentTemplate

ASPX

    <asp:UpdatePanel ID="RecentUpload" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="loaduploads"/>
        </Triggers>
        <ContentTemplate>
            <asp:Panel ID="pnlMyDynamicContent" runat="server">
                 <asp:Button CssClass="uploadButton" ID="loaduploads" runat="server" Text="Load More" OnClick="loaduploads_Click" />
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>

コードビハインド

    ad_index += 5;
    for (int i = 0; i < upload_index; i++)
    {
        try
        {
            SSImage img = images[i];
            HyperLink imglink = new HyperLink();
            imglink.NavigateUrl = "/Image.aspx?id=" + img.id;
            imglink.ImageUrl = "/ShowImage.ashx?imgid=" + img.id;
            imglink.ToolTip = img.title;
            imglink.CssClass = "imgupload";

            // Commented old code
            //Control contentpanel = RecentUpload.ContentTemplateContainer;
            //contentpanel.Controls.AddAt(contentpanel.Controls.Count - 2, imglink);

            //Add controls to Panel instead of updating the ContentTemplate itself
            pnlMyDynamicContent.Controls.AddAt(pnlMyDynamicContent.Controls.Count - 2, imglink);
        }
        catch (ArgumentOutOfRangeException)
        {
            loaduploads.Visible = false;
            break;
        }
    }
于 2013-05-02T05:29:37.587 に答える