質問

HTML ページ上にフォームがあり、ユーザーが ASPX ページに投稿するファイルをアップロードするために使用する必要があります。背後のコードでは、ファイルが実際にロードされたかどうかをテストしたいと考えています。

if (Request.Files.Count > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}

他のものには決して到達できません。これが ASP.NET の動作方法なのでしょうか?ファイルタイプの入力要素がある場合、ファイルが選択されていない場合でも、常に「ファイル」がアップロードされますか?

これを行う適切な方法は何ですか?もしかしてこれ?

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}
役に立ちましたか?

解決

たぶんこれはそうするでしょう:

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}

他のヒント

Request.Files.Count 常にnoが含まれています。の <input type="file"> フォームの要素、aに包まれています Key:Value お店。

したがって、投稿されたフォームに含まれていない場合 <input type="file"> タグ、次に Request.Files.Count 戻ります 0.

Key それは name<input type="file" name="OneOfTheKeys"> 値はタイプです HttpPostedFileWrapper.

見る ここ 学ぶために HttpPostedFileWrapper.

fileuploadコントロールを使用し、.hasfilesをチェックして、何かがアップロードされているかどうかを確認する必要があります。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.aspx

また、.count メソッドによって返されるデータが文字列ではないことも確認します。文字列値「0」は常に int 値 0 より大きくなります。この条件では常に true が返されます。

適切な型が比較されていることを確認するために、.count の戻り値を int として型キャストしてみます。文字列 '-1' であっても、int 0 よりも高いビット値を持ちます。

単なる考えですが、間違っている可能性があります...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top