C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

mvc ajaxでのファイルアップロードをしたい

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■91692 / inTopicNo.1)  mvc ajaxでのファイルアップロードをしたい
  
□投稿者/ yui (1回)-(2019/07/20(Sat) 19:46:28)

分類:[ASP.NET (VB)] 

つい先日asp.net mvcを触りだした超初心者です。
言語はVB.Netを使っています。
ブラウザにはファイル選択フォームと送信ダイアログだけがあり、送信ボタンを押した時
選択したファイルをサーバーにアップロードしたいのですが、その後画面の一部表示変更をしたいのでajaxで実現したいと思っています。
それでいろいろ調べたサイトを参考にプログラムを組んだのですが、ファイルデータをコントロールに持っていくことができません。
コントローラー側での受け取り方が悪いのか、Viewでの渡し方が悪いのかわからないのですが、どなたかわかる方いらっしゃったらご教授いただけないでしょうか。
以下、コードになります。
よろしくお願いいたします。

【View】
@ModelType  WebApplication1.Models.DemoFileUpLoadModel

@Code
    ViewData("Title") = "Index"
End Code

<script>

    function OnFileUploadClick() {
        var $form = $(this).closest('form');
        var formData = new FormData($form.get(0));
        formData.append( "file", $("input[name='CsvFile']").prop("files")[0] );

        $.ajax({
            type: 'POST',
            url: '/FUpload/UploadFile',
            data: { csvfile: formData },
            dataType: "json",
            contentType: false,
            processData: false,
            success: function (data) {
                if (data.IsSuccess) {
                    alert('アップロード成功!');
                } else {
                    alert('アップロード失敗!');
                }
            },
            Error: function(data){
                alert('システムエラー!');
            }
        });
    }

</script>

<h2>Demo For Upload File</h2>

@Using (Html.BeginForm("UploadFile", "FUpload", FormMethod.Post, New With {.id = "form", .enctype = "multipart/form-data"}))
    @Html.AntiForgeryToken()
    @Html.TextBoxFor(Function(model) model.Remarks, 30, 5)
    @<input id = "CsvFile" type="file" name="CsvFile" />
    @<input id="btnUpload" type="button" onclick="OnFileUploadClick()" value="アップロード" />

End Using

【Controller】
       Public Function UploadFile(ByVal csvfile As FormCollection) As ActionResult
            Dim lstErr As List(Of String) = Nothing

      '↓Request.Files.Countがいつも0。取得できない。
            If Request.Files.Count = 0 Then
                Return Json(lstErr)
            End If

      '↓Request.Files("CsvFile")もNothing
            Dim file As HttpPostedFileBase = Request.Files("CsvFile")

            ' ここに処理を書く


            Return Json(lstErr)

        End Function

引用返信 編集キー/
■91695 / inTopicNo.2)  Re[1]: mvc ajaxでのファイルアップロードをしたい
□投稿者/ yui (2回)-(2019/07/21(Sun) 01:28:19)
No91692 (yui さん) に返信
> つい先日asp.net mvcを触りだした超初心者です。
> 言語はVB.Netを使っています。
> ブラウザにはファイル選択フォームと送信ダイアログだけがあり、送信ボタンを押した時
> 選択したファイルをサーバーにアップロードしたいのですが、その後画面の一部表示変更をしたいのでajaxで実現したいと思っています。
> それでいろいろ調べたサイトを参考にプログラムを組んだのですが、ファイルデータをコントロールに持っていくことができません。
> コントローラー側での受け取り方が悪いのか、Viewでの渡し方が悪いのかわからないのですが、どなたかわかる方いらっしゃったらご教授いただけないでしょうか。
> 以下、コードになります。
> よろしくお願いいたします。
>
> 【View】
> @ModelType WebApplication1.Models.DemoFileUpLoadModel
>
> @Code
> ViewData("Title") = "Index"
> End Code
>
> <script>
>
> function OnFileUploadClick() {
> var $form = $(this).closest('form');
> var formData = new FormData($form.get(0));
> formData.append( "file", $("input[name='CsvFile']").prop("files")[0] );
>
> $.ajax({
> type: 'POST',
> url: '/FUpload/UploadFile',
> data: { csvfile: formData },
> dataType: "json",
> contentType: false,
> processData: false,
> success: function (data) {
> if (data.IsSuccess) {
> alert('アップロード成功!');
> } else {
> alert('アップロード失敗!');
> }
> },
> Error: function(data){
> alert('システムエラー!');
> }
> });
> }
>
> </script>
>
> <h2>Demo For Upload File</h2>
>
> @Using (Html.BeginForm("UploadFile", "FUpload", FormMethod.Post, New With {.id = "form", .enctype = "multipart/form-data"}))
> @Html.AntiForgeryToken()
> @Html.TextBoxFor(Function(model) model.Remarks, 30, 5)
> @<input id = "CsvFile" type="file" name="CsvFile" />
> @<input id="btnUpload" type="button" onclick="OnFileUploadClick()" value="アップロード" />
>
> End Using
>
> 【Controller】
> Public Function UploadFile(ByVal csvfile As FormCollection) As ActionResult
> Dim lstErr As List(Of String) = Nothing
>
>       '↓Request.Files.Countがいつも0。取得できない。
> If Request.Files.Count = 0 Then
> Return Json(lstErr)
> End If
>
>       '↓Request.Files("CsvFile")もNothing
> Dim file As HttpPostedFileBase = Request.Files("CsvFile")
>
> ' ここに処理を書く
>
>
> Return Json(lstErr)
>
> End Function


すみません、自己解決しました。
コントローラー側の引数の型をHttpPostedFileBaseにして、View側のdata: { csvfile: formData }をdata: formData にしたらいけたようです。
何時間も悩んだのですが、解決するとこんなことか・・・という感じです。
どなたかの参考になればと思います。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ