0

我创建了一个图表,并将其保存在路径 server.mappath("/images/chart/chartname.png") 中,如果我转到该路径,图像就在那里,我可以在我的计算机上打开它,但是我真正想做的是在我创建它之后在页面上显示图像,最好是异步的。我尝试在更新面板中放置一个 asp:image 控件并更改 url,但这不起作用。我尝试了很多不同的方法,如果有人能指出我正确的方向,那就太好了。我不会发布任何简单的代码,因为到目前为止我正在工作。一旦我开始尝试打印图像,如果我有答案,我会发布片段。

编辑:这是一些代码

启动整个事情的按钮事件:

Protected Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click

    Dim worker As New backgroundWorker

    'Check input

    worker.RunWorker({})

    Session("worker") = worker

    Timer1.Enabled = True

End Sub

这将启动生成图表的工作人员,并启动用于更新面板的计时器。最终在该代码中,会发生这种情况

Dim imgpath As String = Server.MapPath("images/chart/test.png")
chart.SaveImage(imgpath, ChartImageFormat.Png)
chartImg.ImageUrl = "~/images/chart/test.png"

现在,我知道执行此代码后面板正在更新,因为我将一些消息输出到多行文本框,并且它们确实出现了。所有这些控件也在 updatePanel 的 contentTemplate 中。

4

3 回答 3

1

根据我的经验,文件上传在异步模式下不起作用。您应该使用 Jquery 库来异步上传文件。

检查此链接。

http://www.9lessons.info/2011/08/ajax-image-upload-without-refreshing.html
于 2013-02-16T05:14:16.507 回答
1

我不知道 ajax 但你可以在 javascript 的帮助下做到这一点。这是我在我的系统上测试的代码,它运行良好。

<body>
<p>
    welcome to judge site</p>
<form id="form1" runat="server">
<script language="javascript" type="text/javascript">
    function PrintImage()
    {
        printWindow = window.open ("", "mywindow","location=1,status=1,scrollbars=1,width=600,height=600");
        printWindow.document.write("<div style='width:100%;'>");
        printWindow.document.write("<img id='img' src='" + document.getElementById('iconId').src + "'/>");
        printWindow.document.write("</div>");
        printWindow.document.close();
        printWindow.print();
    }
</script>
<div>
    <img id="iconId" alt="photo" src="iconId.png" style="width: 500px; height: 360px" /><br />
    <input type="button" id="btnPrint" value="Print Image" onclick="PrintImage()" />
</div>
</form>

您可以在以下链接上找到其他更多示例(以上代码也来自此来源,但由我编辑以使其在我的系统上运行)

访问http://forums.asp.net/p/1463001/3369521.aspx

于 2013-02-16T19:33:42.353 回答
1

在更新面板中设置ImageUrlASP.Net 图像控件的属性应该可以做到这一点,而不必使用 Javascript,尽管这种方法可能非常有效。UpdatePanel 倾向于“繁重”,即 ScriptManager、UpdatePanel 和 ASP.Net ViewState 倾向于通过它们的 AJAX 方法来回发送大量信息。您可以通过使用Fiddler来查看您的网络流量来了解我的意思。

话虽如此,我能够通过以下方式达到预期的效果。我有两个静态图像,Image1.jpg 和 Image2.jpg,但只要 URL 正确,它应该可以与您动态生成的图像一起使用。

这是我的 ASPX 页面的文本:

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Image ID="Image1" runat="server" ImageUrl="~/Image1.jpg" Width="300"></asp:Image><br />
            <asp:Button runat="server" ID="btnSwitchImage" Text="Switch" />
        </ContentTemplate>
    </asp:UpdatePanel>

</div>
</form>

这是代码隐藏:

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load( object sender, EventArgs e )
    {
        btnSwitchImage.Click += new EventHandler( btnSwitchImage_Click );
    }

    void btnSwitchImage_Click( object sender, EventArgs e )
    {
        Image1.ImageUrl = "~/Image2.jpg";
    }
}

只要按钮和图像控件在 UpdatePanel 中,ContentTemplate所有内容都应该通过 AJAX 传递。再次使用 Fiddler 确认这一点。

如果此示例适用于您,但您仍然无法让您的应用程序正常工作,请尝试在您的问题中发布一些代码。它可能会帮助每个人直接分析问题。

于 2013-02-16T20:42:40.657 回答