2013-01-24 11 views
6

Próbuję uzyskać działanie tego AjaxFileUpload -Control (używane w ContentPage). Ale nie uruchamia się OnUploadComplete Zdarzenie po stronie serweraAjaxFileUpload nie uruchamia zdarzenia OnUploadComplete

Używam wersji 4.1.60919.0 zestawu ControlToolkit. Próbowałem wszystkiego, co znalazłem w Internecie.

Oto tylko kilka kroków:

  • Dodany enctype = "multipart/form-data" method = "post" do formularzy elementu w moim MasterPage
  • zagnieżdżone AjaxFileUpload się w UpdatePanel z UpdateMode = Zawsze
  • Wypróbowane wydarzenia UploadedComplete i OnUploadComplete, ale pozostał na drugim
  • dodał try-catch-blok w EventHandler złapać nieznanych wyjątki i wydrukować ExceptionMessage do etykiety na stronie -> nic się nie stało
  • Próbowaliśmy go z (wy) ThrobberImage ...
  • Wiele innych TIPPS że nie działa ...

Więc mam nadzieję, że będziemy razem znaleźć rozwiązanie w tej społeczności. Herezje mój znaczników:

<%@ Page Title="New Download" Language="C#" MasterPageFile="~/MasterPage.master"  AutoEventWireup="true" CodeFile="NewDownload.aspx.cs" Inherits="Internals_NewDownload" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server"> 

<ajax:ToolkitScriptManager ID="ToolkitscriptManager" runat="server"> </ajax:ToolkitScriptManager> 
<h1>Create a new Download</h1> 

     <ajax:AjaxFileUpload ID="FileUpload" runat="server" ThrobberID="ThrobberLabel" OnUploadComplete="FileUpload_UploadComplete" /> 
     <asp:Label ID="ThrobberLabel" runat="server" Style="display: none;"><img alt="UploadingPicture" title="Please wait while uploading..." src='<%= Constants.DomainString + "/Data/Images/loading-small.gif" %>' /></asp:Label> 
     <asp:Label ID="DownloadLabel" runat="server"></asp:Label> 

</asp:Content> 

I to jest moim kodzie:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Internals_NewDownload : System.Web.UI.Page 
{ 
private string m_LanguageCode; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (RouteData.Values.ContainsKey("LanguageCode")) 
     m_LanguageCode = RouteData.Values["LanguageCode"].ToString(); 

    //if (IsPostBack) 
    // return; 
    if (!User.IsInRole("Administrator") && !User.IsInRole("Kunde") && !User.IsInRole("Mitarbeiter")) 
     Response.Redirect(Constants.DomainString + "/PermissionDenied.aspx"); 
    Session[Constants.NonGlobalizedString] = true; 
    Session[Constants.MenuInfoSession] = new ClsMenuInfo("NewDownload"); 
} 

protected void FileUpload_UploadComplete(object sender,  AjaxControlToolkit.AjaxFileUploadEventArgs e) 
{ 
    try 
    { 
     string filePath = "~/upload/" + e.FileName; 
     DownloadLabel.Text = filePath; 
    } 
    catch (Exception ex) 
    { 
     DownloadLabel.Text = ex.Message; 
    } 
} 
} 

Proszę, jeśli masz jakiś pomysł, nie wahaj się dać mi znać go. Jestem bardzo zdezorientowany, ponieważ myślę, że właśnie zrobiłem to w tym, jak znalazłem w Internecie ...

Z góry dziękuję!

Odpowiedz

0

Weź pod uwagę, że kontrola używa parametru QueryString do wykrywania własnego oddzwonienia. Uważam, że przyczyną problemu jest utrata tego parametru w wyniku przepisania adresu URL. Nie jestem ekspertem w stosowaniu routingu, ale moim zdaniem musisz zarejestrować parametr contextkey w tabelach routingu i dostroić źródła AjaxControlToolkit, aby użyć RouteData zamiast Request.QueryString do pobrania wartości. Sprawdź ten link, aby uzyskać więcej informacji: AjaxControlToolkit Source Code

+0

Witam, dziękuję za tę sugestię. Po prostu próbowałem następujących rzeczy. Usunąłem pierwsze dwie linie, które odczytują kod języka z kolekcji RouteData. Następnie otworzyłem stronę według ścieżki macierzystej (/Internals/NewDownload.aspx zamiast /Internals/de/NewDownload.aspx), ale problem nadal istnieje. Impreza nie zostanie zwolniona ... :-( Po prostu BTW: ma na celu opublikowanie odpowiedzi na tej stronie jako komentarz lub jako nowy wpis na moje pytanie? – Roland

+0

@Roland, w porządku, aby opublikować komentarz do odpowiedzi A także, dlaczego uważasz, że zdarzenie "UploadComplete" nie zostało uruchomione? Czy próbowałeś ustawić punkt przerwania w metodzie "FileUpload_UploadComplete"? Uważaj, że tekst 'DownloadLabel' nie zostanie zaktualizowany w module obsługi zdarzenia UploadComplete, nawet jeśli zdarzenie zostało wywołane –

+0

I tylko testowałem to, oglądając DownloadLabel ... Dlaczego NIE powinien być aktualizowany? – Roland