2009-05-06 420 views
8

FileUploadコントロールの[参照]ボタンで選択したファイルのサイズを表示したいとします。asp.net FileUploadイベントを選択してアップロードする前にアップロード

理想的には、この値はユーザーがファイルを選択した直後に表示されますが、[ファイルをアップロード]ボタンをクリックする前に表示されることが理想です。

私はウェブフォームを持っています。ボタンは次のようになります。

<asp:Button ID="UploadButton" runat="server" onclick="UploadButton_Click" Text="Upload File"/>   

ボタンコントロールのonclickイベントによってポストバックが発生し、ファイルがアップロードされます。

私はファイルのサイズを取得する方法を知っていますが、[ファイルをアップロード]ボタンをクリックしてポストバックが発生する前にはわかりません。

ボタンをクリックせずにフォームを送信できるイベント(ポストバック)がFileUpload Webコントロールに関連付けられていますか?

全体的な意図は、アップロードにかかる時間の長さをユーザーに感じてもらいたいということです.2MBファイルなどと比べて10mbファイルに対して異なるexpectionを設定します)。

答えて

14

問題は、ポストバックすることなくクライアント側のファイルのサイズを見つける方法がないことです。あなたはAjaxを使うことができますが、それは最初にファイルをアップロードすることを意味します。

これは、ActiveX何らかの制御を使用してのみ行うことができます。私はSilverlight FileUploaderのようなものを使用することをお勧めします。なぜなら、投稿前にファイルのサイズを取得し、素晴らしい進捗インジケータを持っているからです。

UPDATE:ユーザーがブラウズをクリックした後にポストバックまたはAjax要求をトリガーする場合、クライアント側のイベントは「オンチェンジ」です。 onchangeイベントを使用する方法の例を次に示します。

<asp:FileUpload runat="server" 
    onchange="alert('you selected the file: '+ this.value)" /> 

あなたはonchangeを使用して、ファイルをアップロードしてからファイルのサイズを示すラベルを更新するajaxを起動できます。これは、大きなファイルの場合には、手間をかけて長時間かかることをユーザーに知らせる目的に反してしまうという問題があります。

ここにもう1つの推奨事項があります:アップロードする前にファイルのサイズを決定するためにフラッシュを使用するjQueryプラグインがあり、非常に使いやすいです。

+1

FileUploadの「選択プロセス」(つまり、「参照」をクリックし、FileUploadコントロールのテキストボックス部分にデータを入力するイベントがあるかどうか疑問に思っていました。イベントはJavaScriptを使用して最初にフォームを送信することができます。アップロードボタンがクリックされると、2回目の送信が行われます。そのようなイベントを知っていれば、FileUpload1.PostedFile.ContentLengthプロパティにアクセスできますか? –

+0

Visual Studio 2005では、のonchangeイベントはありません。VS2008でサポートされているかどうかは確認していません。 –

+1

私はあなたが何を意味するかを見ています。コントロールのインテリセンス/オブジェクトモデルでこれが欠如していることを無視します。ここに生成されたHTMLは次のとおりです。

関連する問題