Я все проверил и не могу понять. Форма - это 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 и зависит от обработки этого файла ...