Опит за POST файл с изображение - параметърът в ActionResult е null

Искам да направя качване на файл с MVC и jQuery, но параметърът ми е нулев. В моя jQuery получавам данните от формуляра и им присвоявам променлива и след това го ПУБЛИКУВАМ в ActionResult. Моят параметър е нулев и не съм сигурен дали предавам данните правилно.

HTML

<table>
                <tr>
                    <td><img src="@Url.Content("~/AMTImages/UserAvatar.png")" width="64" height="64" style="border: thin solid" /></td>
                    <td></td>
                    <td></td>
                    <td>
                        <form enctype="multipart/form-data" id="imageUploadForm">
                            <table>
                                <tr>
                                    <td>@Html.LabelFor(m => m.DisplayName, "Display Name: ")</td>
                                    <td style="padding-left: 10px;">@Html.TextBoxFor(m => m.DisplayName)</td>
                                </tr>
                                <tr>
                                    <td>@Html.LabelFor(m => m.UserImage, "User Image: ")</td>
                                    <td style="padding-left: 10px; float: right;">@Html.TextBoxFor(m => m.UserImage, new { type = "file", accept = "image/*" })</td>
                                </tr>
                            </table>
                        </form>
                    </td>
                    <td>
                        <table style="display:none;">
                            <tr>
                                <td>
                                    <progress></progress>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>

JavaScript

$(':file').change(function () {
    var file = this.files[0];

    $.ajax({
        url: '@Url.Action("UploadImage", "User")',  //Server script to process data
        type: 'POST',
        data: file,
        beforeSend: function() {  
        },
        success: function () {
        },
        error: function () {
        },
        processData: false,
        contentType: file.type
    });
});

Резултат от действие

 public ActionResult UploadImage(HttpPostedFileBase file)
        {
            if (file != null && file.ContentLength > 0)
                try
                {
                    string path = Path.Combine(Server.MapPath("~/Images"),
                                               Path.GetFileName(file.FileName));
                    file.SaveAs(path);
                    ViewBag.Message = "File uploaded successfully";
                }
                catch (Exception ex)
                {
                    ViewBag.Message = "ERROR:" + ex.Message.ToString();
                }
            else
            {
                ViewBag.Message = "You have not specified a file.";
            }

            return View();
        }

person nick gowdy    schedule 18.11.2014    source източник
comment
@Rory McCrossan - публикацията ми е относно ASP.NET MVC и този отговор показва само клиентски код.   -  person nick gowdy    schedule 18.11.2014
comment
Това е правилното. Проблемът тук се дължи на вашия код от страна на клиента, като решението е същото като въпроса, към който свързах.   -  person Rory McCrossan    schedule 18.11.2014


Отговори (1)


Вашето UploadImage очаква POST параметър на файл. Къде го посочвате във вашия преден код? Не виждам къде го подминаваш.

Опитайте да промените файла HttpPostedFileBase на HttpPostedFileBase userImage

person Yannis    schedule 18.11.2014
comment
Забелязах, че всъщност не предавам данните, но те все още са нулеви. Просто трябва да знам какъв тип данни е моят параметър в C#. Актуализирах моя SO пост с новия javaScript. - person nick gowdy; 18.11.2014