2010-02-24 2 views
1

У меня есть мастер управления внутри панели обновления. Для некоторых шагов мастера требуется несколько секунд для отображения, поэтому я хочу показать элемент управления updateprogress во время загрузки. Это работает, но я хотел бы показать другое изображение (случайное изображение, выбранное из папки) в progresstemplate между каждым wizardstep.Случайное изображение в UpdateProgress

Я могу получить доступ к управлению изображением и изменить ImageUrl, но progresstemplate никогда не обновляется. Он сохраняет первое случайное изображение, выбранное с самого первого раза, когда оно загружается.

Я пробовал обновлять imageUrl на странице Load, а также переопределяя метод 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> 

После каждого асинхронного постбэка это будет вызывать веб-метод на стороне сервера и установить СРК изображения в случайном URL. =)

+0

Спасибо. Прекрасно работает. – MrMagoo

0

Вы можете указать URL, чем идет на страницу 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(); 
    } 
Смежные вопросы