私が抱えている問題は、コードビハインドメソッドを
使用せずにからファイル情報を取得することです。<input type=file>
を使用して情報を取得しようとすると、ファイルはコードビハインドで常にnullとして返されます<form>
。これは、実際にサーバーに送信されていないためだと思います。Request.Files
とにかく、ファイル情報を使用せずにサーバーに送信されるファイル情報を取得することはできます
か?<form>
これが私が使用しているhtmlです
<input type="file" id="upload_file" name="upload_file" runat="server" accept="image/*" onchange="copyFile()" />
そしてこれは背後にあるコードです
HttpPostedFile file = Request.Files["upload_file"];
if (file != null && file.ContentLength > 0)
{
string fname = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname)));
}
ウェブページの設定方法が原因で使用できません。CSSでは修正できないIE(IE9でも)でのみいくつかの恐ろしいフォーマットの問題が発生します。また、イベントにアクセスできるようにするためで<form>
はなく、を使用しています。<input type=file>
<asp:FileUpload>
onchange
編集!
Webサイト内に埋め込まれているマスターページには、runat="server"がすでに追加されているフォームがあります。以前にこれについて言及しなかったことをお詫び申し上げます。作成しようとしている新しいフォームにrunat="server"を追加しようとしたときにわかりました。
どんな助けでも大歓迎です!ありがとうございました!
編集!
最終コード
@bkwintと@TrizZzの両方に感謝します。あなたの助けがなければ、私はまだこれを理解しようとしています。
html部分
<asp:FileUpload id="upload_file" runat="server" OnLoad="upload_file_OnLoad" />
onchangeをasp:FileUploadに追加するための背後にあるコード
protected void upload_file_OnLoad(object sender, EventArgs e)
{
((System.Web.UI.WebControls.FileUpload)sender).Attributes.Add("onchange", "copyFile();");
}
およびファイルを保存するためのコードビハインド
if (Request.Files.Count > 0)
{
if (Request.Files[0].FileName.Length > 0)
{
Request.Files[0].SaveAs("~/App_Data/" + Request.Files[0].FileName);
}
}
asp:FileUploadに追加されたonchangeを使用して、送信のマスターページのフォームを使用できるようにするJavaScript。id'aspnetForm'は、マスターページにあるフォームです。
document.getElementById('aspnetForm').submit();
いくつかの調査を通じて私が学んだことは、おそらくcssが不幸になり、フォームが適切に送信されない原因は、ネストされたフォームが悪いためであるということです。マスターページにわからないフォームがあったので、別のフォームを追加すると、Webページは追加したフォームを無視してしまいました。マスターページで送信を呼び出すことにより、アップロードされたファイルがサーバーに正しくプッシュされます。
返信/コメントして助けてくれたすべての人にもう一度感謝します!
注
これは、設定方法によってはIEで機能しない場合があります。fileuploadから直接フォームを送信しようとすると、IEはそれを好みません。