ASP.NET MVC 5 HttpPostedFileBase всегда пусто - PullRequest
0 голосов
/ 24 апреля 2018

Я все проверил и не могу понять. Форма - это multipart / form-data, имя ввода совпадает с именем переменной в методе post, и все же файл всегда равен null, а Request.Files всегда пуст.

@model Gnosis.View.Areas.OpportunityAction.Models.Rfp.RfpModel
@using (Html.BeginForm(MVC.OpportunityAction.ChangeRfp.Edit(), FormMethod.Post, new { enctype = "multipart/form-data", id="submitForm" }))
{
<input type="file" name="file" id="file" style="width: 400px"/>
}

метод управления

 [HttpPost]
    public virtual ActionResult Edit(HttpPostedFileBase file, RfpModel model)
    {
}

Если я сделаю пост ajax, который работает, но я должен также работать с механизмами MVC и не могу понять, почему это не ...

Обновление. Это код в представлении:

@model Gnosis.View.Areas.OpportunityAction.Models.Rfp.RfpModel
@using (Html.BeginForm(MVC.OpportunityAction.ChangeRfp.Edit(), FormMethod.Post, new { enctype = "multipart/form-data", id="submitForm" }))
{

@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.SystemEditDate)
@Html.AntiForgeryToken()

@Html.HiddenFor(m => m.Attachment)
@Html.HiddenFor(m => m.Description)
@Html.HiddenFor(m => m.FileSize)
@Html.HiddenFor(m => m.FileDate)
@Html.HiddenFor(m => m.FileTime)
@Html.HiddenFor(m => m.FileExtension)
@Html.HiddenFor(m => m.OpportunityRfpId)

<table class="keyvalue withrowpadding">
    <tr>
        <td class="key">@Html.LabelFor(m => m.Rfp)</td>
        <td class="value">@Html.EditorFor(m => m.Rfp)</td>
    </tr>
    <tr>
        <td class="key">@Html.LabelFor(m => m.RfpDate)</td>
        <td class="value">@Html.EditorFor(m => m.RfpDate)</td>
    </tr>
    <tr>
        <td class="key">@Html.LabelFor(m => m.FileName)</td>
        <td class="value">@Html.TextBox("NameForDisplay", Model.FileName, new {disabled = "disabled", style = "width:300px"})</td>
    </tr>
    <tr>
        <td class="key">RFP File Name:</td>
        <td class="value"><input type="file" name="file" id="file" style="width: 400px"/> @Html.ValidationMessageFor(m => m.Attachment)</td>
    </tr>
    <tr>
        <td></td>
        <td>
            <input type="submit"  name="submit" value="Save" id="Save"/>
            <input type="button" value="Cancel"/>
        </td>
    </tr>

</table>
@Html.ValidationSummary()
}
<script>
    $(document).on('click', '#Save', function () {
        var vcfData = new FormData($('#submitForm')[0]);
        var rfp = $("#Rfp").val();
        var rfpDate = $("#RfpDate").val();
        var id = $("#Id").val();
        var opportunityRfpId = $("#OpportunityRfpId").val();
        console.log(id);
        $.ajax({
            url: '@Url.Action(MVC.OpportunityAction.ChangeRfp.SubmitFile())' + "?file=" + vcfData + '&id=' + id + '&Rfp=' + rfp + '&RfpDate=' + rfpDate + '&OpportunityRfpId='+ opportunityRfpId,
            type: "post",
            data:  vcfData,
            processData: false,
            contentType: false,
            cache: false,
            success: function (data) {
            }
        });
    });
</script>

Код является унаследованным, и, возможно, первоначальный разработчик не смог разгадать эту загадку, поэтому он написал пост Ajax. Но мне нужно расширить эту функциональность, и это должно быть сделано в методе Edit и зависит от обработки этого файла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...