5

私が抱えている問題は、コードビハインドメソッドを<input type=file>使用せずにからファイル情報を取得することです。<form>を使用して情報を取得しようとすると、ファイルはコードビハインドで常にnullとして返されます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)));
    }

<form>ウェブページの設定方法が原因で使用できません。CSSでは修正できないIE(IE9でも)でのみいくつかの恐ろしいフォーマットの問題が発生します。また、イベントにアクセスできるようにするためで<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はそれを好みません。

4

2 に答える 2

2

フォームコントロールを使用するにはフォームが必要です。CSSに問題があるとおっしゃっていましたが、問題が発生した場合はcssに対処できます。


HttmpPostedFileは送信時にのみ投稿されるため、NULLファイルを取得します。postメソッドを取得するにはフォームが必要です。ファイルは投稿中にのみ送信されます。これを行う必要があります。

<form action="yourPage.aspx" method="post">
<input type="file" onchange="this.form.submit()" name="upload_file" id="upload_file"/>
</form>

そして、yourPage.aspxのロードイベントでは:

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を除いて、問題はありません。

于 2012-08-22T13:14:40.020 に答える
1

ファイル入力はフォーム内に配置する必要があります。私の知る限り、フォームタグから外してデータを送信する方法はありません。

ドットネットFileUploadタグの代わりにタグを使用する理由に関する限り。バックエンドでonchangejavascriptを広告してみませんか。

したがって、このようにタグを定義します

<asp:FileUpload ID="FlUpld_x" runat="server" OnLoad="FlUpld_x_OnLoad" />

このように背後にあるコードを定義します

protected void FlUpld_x_OnLoad(object sender, EventArgs e)
{
  ((FileUpload)sender).Attributes.Add("onchange", "js_function();");
}
于 2012-08-22T12:55:54.760 に答える