web-dev-qa-db-ja.com

ASP.NET FileUploadコントロールを正しく使用する方法

ASP.NETでFileUploadコントロールを使用しようとしています

現在の名前空間のセットアップは次のとおりです。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

そして、私のクラス内では、私はちょうど使用しています:

FileUpload fileUpload = new FileUpload();

ただし、通常はFileUploadの一部である属性は、.HasFileなどのように使用できないようです。コードビハインドでButtonクリックメソッドを作成しようとしています。

誰が理由を知っていますか?

19
Hosemeyer

ASP.NETコントロールは、aspxマークアップファイルに配置する必要があります。それは彼らと働く好ましい方法です。したがって、FileUploadコントロールをページに追加します。 IDおよびrunatを含むすべての必須属性があることを確認してください。

<asp:FileUpload ID="FileUpload1" runat="server" />

FileUpload1のインスタンスは、ページの部分クラスである自動生成/更新された* .designer.csファイルに自動的に作成されます。通常、中身を気にする必要はありません。aspxページのコントロールが自動的にインスタンス化されると仮定するだけです。

ポストバックを行うボタンを追加します。

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

次に、コードのある* .aspx.csファイルに移動し、ボタンクリックハンドラーを追加します。 C#では、次のようになります。

protected void Button1_Click(object sender, EventArgs e)
{
  if (this.FileUpload1.HasFile)
  {
    this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName);
  }
}

以上です。すべて正常に機能するはずです。

55
Maciej

コードビハインドでの私のソリューションは:

System.Web.UI.WebControls.FileUpload fileUpload;

理由はわかりませんが、FileUploadをSystem.Web.UI.WebControlsなしで使用している場合、それはYourProject.FileUploadではなくSystem.Web .UI.WebControls.FileUpload

1
Josef

コードビハインドファイルでFileUploadをインスタンス化する代わりに、マークアップファイル(.aspxファイル)で宣言するだけです。

<asp:FileUpload ID="fileUpload" runat="server" />

その後、HasFileなどのコントロールのすべてのプロパティにアクセスできます。

1
wsanville

コードビハインドからFileUploadコントロールを追加すると、HasFileプロパティが使用可能な場合(たとえば、Clickイベントで)正常に機能するはずです。

プロパティが使用できないように見える場合(コンパイラエラーとして、またはintellisenseを介して)、おそらくあなたが思っているとは異なる変数を参照しています。

1
tbischel

オブジェクトに対してインテリジェンスが機能しない場合、通常、作業している行より上のクラスのどこかにエラーがあることに気付きました。

もう1つのオプションは、FileUploadオブジェクトをインスタンス変数としてインスタンス化していないことです。コードを確認してください:

FileUpload fileUpload = new FileUpload();

コードビハインドの関数内にありません。

0
Edison