0

コントロールを使用した参照とアップロードは、asp:FileUpload完全に正常に機能しています。
しかし、それは2段階のプロセスです。まず、ファイルを参照して選択する必要があります。

シングルステップで動作させたいので、シングルステップにするために、次のコードを試しました:

protected void Button1_Click(object sender, EventArgs e)
{
    //to launch the hidden fileupload dialog
    ClientScript.RegisterStartupScript (GetType(),
"hwa", "document.getElementById('fileupload').click();", true);

    //Getting the file name
    if (this.fileupload.HasFile)
    {
        string filename = this.fileupload.FileName;

        ClientScript.RegisterStartupScript(GetType(), "hwa", "alert('Selected File: '" + filename + ");", true);
    }
    else 
    {
        ClientScript.RegisterStartupScript(GetType(), "hwa", "alert('No FILE has been selected');", true);
    }

}



このコードには、fileUploadで呼び出されるコントロールが 1 つありますButton1_Click
理想的には、最初の行を実行し、次にファイル アップロード コントロールを表示し、ファイルを選択するかダイアログをキャンセルした後、フローは次の行に進む必要があります。しかし、全機能の実行が終了した後にダイアログが表示されます。
この非同期または予期しない実行フローif (this.fileupload.HasFile)が原因で (ユーザーはまだファイルを選択するように求められていないため) false が返され、選択したファイル名が取得されません。

このコードを変更して、1 ステップでファイルをアップロードできますか? または、これを行う他の方法が可能な場合は?

注 -window formsと を使用しないように依頼しThreadsました。したがって、これら 2 つを使用した解決策は受け入れられません。

4

4 に答える 4

1

Web 環境にクライアント側/サーバー側の切断があるという事実を見逃しています。

あなたの行:ClientScript.RegisterStartupScript (GetType(),"hwa","document.getElementById('fileupload').click();", true);はクライアント側のコードであり、サーバー側のスクリプトが完了し、クライアント側の JavaScript であるため、結果の HTML/javascript/CSS がブラウザに返されるまで実行されません。onchangeファイル アップロード コントロールのイベントを利用したい。

ASP.NET FileUpload: how to automatically post back once a file is selected?という質問が役に立ちます。

于 2013-04-08T12:11:57.120 に答える
1

これはまさにあなたが探しているものではありませんが、あなたが望むことをします。違いは、別のボタンをクリックする代わりに、ボタンをクリックする必要があることですBrowse。ボタンを押すOpenと、ページはポストバックします。これにはJQueryを使用しました。これが私のコードです

ASPX

<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.9.1.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="fileupload1" runat="server" />
        <asp:Button ID="btn" runat="server" OnClick="btn_Click" Text="upload" style="display:none" />
    </div>
    <script type="text/javascript">
        var isfirst = true;
        $(function () {

            $('#<%= fileupload1.ClientID %>').on('change', function (e) {
                console.log('change triggered');
                $('#<%= btn.ClientID%>').trigger('click'); // trigger the btn button click which i have hidden using style='display:none'
            });
        });

    </script>
    </form>
</body>

コードビハインド

protected void btn_Click(object sender, EventArgs e)
{
    //TODO 
}
于 2013-04-08T12:30:11.290 に答える
0

ここに遅れて到着した人のために、

    <div>
        <asp:FileUpload ID="fu" runat="server"  CssClass="bbbb" onchange="clickSeverControl()"/>
        <asp:LinkButton Text="Upload" ID="lnkUpload" runat="server" OnClientClick="showUpload();return false;" OnClick="lnkUpload_Click"/>
    </div>

css でファイル コントロールを非表示にする

    <style>
    .hiddenStyle {
        visibility:hidden;            
    }
    </style>

リンクボタンのクライアントクリックイベントで、ファイルアップロードコントロールのクリックをトリガーします

    function showUpload() {
        document.getElementById("fu").click();
    }

変更イベントでサーバー側のクリックをトリガー

    function clickSeverControl() {

        __doPostBack('<%= lnkUpload.ClientID %>', 'OnClick');
    }

サーバーで、アップロードされたファイルをクリックして保存します

    protected void lnkUpload_Click(object sender, EventArgs e)
    {
        fu.PostedFile.SaveAs(Server.MapPath("~/Upload") + "/" + fu.PostedFile.FileName);
    }
于 2014-04-06T18:25:56.170 に答える