2010-02-24 121 views
1

我在updatepanel内部有一个向导控件。某些向导步骤需要几秒钟才能显示,因此我想在加载时显示updateprogress控件。这是行得通的,但我想在每个wizardstep之间的progresstemplate中显示不同的图像(从文件夹中选择的随机图像)。UpdateProgress中的随机图像

我能够访问图像控件并更改ImageUrl,但progresstemplate从不更新。它保留从第一次加载时选择的第一个随机图像。

我已经尝试更新PageLoad上的imageUrl并重写Render()方法,但都不起作用。

<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="500" > 
    <ProgressTemplate> 
     <div class="modalWrapper"> 
      <div class="updateProgress"> 
       <asp:Image ID="imgLoading" runat="server" AlternateText="Loading..." /> 
      </div> 
     </div> 
    </ProgressTemplate> 
</asp:UpdateProgress> 

在代码隐藏:

protected void Page_Load(object sender, EventArgs e) 
{ 
System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)UpdateProgress1.FindControl("imgLoading"); 

    if (img != null) 
     img.ImageUrl = PickImageFromDirectory("~/images/loaders/"); //returns "~/images/loaders/randomimage.gif" 
} 

也尝试:

protected override void Render(HtmlTextWriter writer) 
    {   
     System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)UpdateProgress1.FindControl("imgLoading"); 

     if (img != null)      
      img.ImageUrl = PickImageFromDirectory("~/images/loaders/"); //returns "~/images/loaders/randomimage.gif" 

     base.Render(writer); 
    } 

回答

0

您的图像比可能不会被重新加载,因为坐的UpdateProgress您的UpdatePanel以外的更多。 UpdatePanel的本质是只有其中的控件在异步请求上更新。 =)

这里是你可以做什么:

变化PickImageFromDirectory是一个静态方法并将其标记为在代码隐藏一个WebMethod:

[WebMethod] 
public static string PickRandomImage() 
{ 
    // Logic to return the full path to a random image 
} 

然后,在客户端上进行底部下面的脚本:

<script type="text/javascript"> 
function requestEnded() 
{ 
    PageMethods.PickRandomImage(imageSuccess, imageFailed); 
} 

function imageSuccess(result,ctx,methodName) 
{ 
    document.getElementById('<%= imgLoading.ClientID %>').src = result; 
} 

function imageFailed(err,ctx,methodName) 
{ 
    alert(err); 
} 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(requestEnded); 
</script> 

每个异步回后,这将调用服务器端Web方法和图片src设置为随机URL。 =)

+0

谢谢。很棒。 – MrMagoo 2010-02-25 16:15:38

0

比去一个aspx页面您可以指定一个网址:

<asp:Image runat="server" ImageUrl="GenerateImage.aspx"/> 

在GenerateImage.aspx:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.ContentType = "image/jpeg"; 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Write(GetRandomImageData()); 
     Response.End(); 
    }