Проблема загрузки файлов в MVC
У меня есть проблема, которую я не могу понять.
Это проблема:
HttpPostedFileBase возвращает null и запрос.Файлы.Счетчик возвращает ноль.
мой взгляд:
@model List<BorcAlacakMvc.Models.BaBelgeVM> @{ ViewBag.Title = ""; Layout = null; } @using (Html.BeginForm("BaBelgeKaydet", "BorcAlacak", FormMethod.Post, new { id = "popupForm", enctype = "multipart/form-data" })) { @Html.AntiForgeryToken() <h4>@ViewBag.Title</h4> <table> <thead> <tr> <th>Sıra</th> <th>Belge</th> <th>Belge Tarihi</th> <th>Belge No</th> @*<th>Veri</th>*@ @*<th></th>*@ </tr> </thead> <tbody> @if (Model != null && Model.Count > 0) { int j = 0, s = 0; foreach (var i in Model) { string dosya = "dosya" + j.ToString(); <tr> @Html.HiddenFor(k => k[j].ID) @Html.HiddenFor(k => k[j].SebepBelgeID) @Html.HiddenFor(k => k[j].BorcAlacakID) @if (i.BelgeSira > 0) { <td>@Html.DisplayFor(k => k[j].BelgeSira, new { htmlAttributes = new { @class = "form-control" } })</td> } else { s++; <td>@Html.DisplayFor(k => k[j].BelgeSira, new { value = s})</td> } <td>@Html.DisplayFor(k => k[j].BelgeAdi, new { htmlAttributes = new { @class = "form-control" } })</td> <td>@Html.EditorFor(k => k[j].BelgeTarihi, new { htmlAttributes = new { @class = "form-control" } })</td> <td>@Html.EditorFor(k => k[j].BelgeNo, new { htmlAttributes = new { @class = "form-control" } })</td> <td>@Html.HiddenFor(k => k[j].Veri, new { htmlAttributes = new { @class = "form-control" } })</td> <td>@Html.TextBoxFor(k => k[j].UBelge, new { type = "file" })</td> @*<td><input type="file" id="@j" name="dosya" /></td>*@ </tr> j++; } } </tbody> </table> <div class="row" style="border:ridge"> <div class="col-md-offset-2 col-md-4"> <input type="submit" value="Kaydet" class="btn btn-success" /> </div> </div> <div class="err"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) </div> }
мой контроллер:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult BaBelgeKaydet(List<BaBelgeVM> baBelgeVM, HttpPostedFileBase[] UBelge) { var Dosya = Request.Files.Count; var errors = ModelState.Where(f => f.Value.Errors.Count > 0).Select(s => new { s.Key, s.Value.Errors }).ToArray(); bool durum = false; if (ModelState.IsValid) { if (YeniKayit == true) { foreach (var Kayit in baBelgeVM) { int i = 0; //string DosyaID = Convert.ToString(Kayit.Sira); //var Dosya = Request.Files.Count; string DosyaYukle = "[" + i + "]UBelge"; HttpPostedFileBase UBelge = Request.Files[DosyaYukle]; var DosyaYolu = Path.Combine(Server.MapPath("~App_Data/Upload"), borcalacakid.ToString()); BorcAlacakBelge borcAlacakBelge1 = new BorcAlacakBelge() { Sira = Kayit.BelgeSira, BorcAlacakID = borcalacakid, SebepBelgeID = Kayit.SebepBelgeID, BelgeTarihi = Kayit.BelgeTarihi, BelgeNo = Kayit.BelgeNo, Veri = DosyaYolu }; i++; //Dosya.SaveAs(DosyaYolu); db.BorcAlacakBelge.Add(borcAlacakBelge1); db.SaveChanges(); } } db.SaveChanges(); durum = true; } return new JsonResult { Data = new { durum = durum } }; }
Моя Модель Представления:
public class BaBelgeVM { public int ID { get; set; } public int BelgeSira { get; set; } public int BorcAlacakID { get; set; } public int SebepBelgeID { get; set; } public string SebepAdi { get; set; } public int SebepID { get; set; } public string BelgeAdi { get; set; } public int BelgeID { get; set; } [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime BelgeTarihi { get; set; } public string BelgeNo { get; set; } public string Veri { get; set; } public HttpPostedFileBase UBelge { get; set; } public List<BorcAlacakBelge> borcAlacakBelge { get; set; } public List<BelgeListesi> belgeListesi { get; set; } }
Что я уже пробовал:
Сохранение списка документов, созданных в соответствии с выбранной пользователем причиной, в базу данных и хранение их на сервере.
Например:
Три разных документа по причине "х"
Пять разных документов по причине "Y"
Шесть различных документов по причине "Z"
F-ES Sitecore
Ваш код никак не связан. Функция, которая принимает файлы, - это DocumentSave, но вы нигде не ссылаетесь на нее.
Member 14625279
Я не могу тебя понять. Пожалуйста, не могли бы вы дать мне более подробную информацию?
Richard Deeming
Ваше действие называется DocumentSave
. Ваша модель представления называется DocumentVM
, который имеет свойства, называемые ID
, ReasonID
, RowNumber
, DocumentDate
, DocumentNo
, и UploadDocument
.
Вид, который Вы нам показали, публикуется в действии под названием BaBeKaydet
. Его модель представления представляет собой список BorcAlacakMvc.Models.BaBelgeVM
объекты, которые, как представляется, имеют свойства, называемые ID
, SebepBelgeID
, BorcAlacakID
, BelgeSira
, BelgeAdi
, BelgeTarihi
, BelgeNo
, Veri
, и UBelge
. Он не имеет HttpPostedFileBase
собственность.
Нет никакой связи между представлением, которое Вы нам показали, и действием и моделью представления, которую Вы нам показали.
Нажмите на зеленую ссылку "улучшить вопрос" и обновите свой вопрос, чтобы включить реальный" просмотр, действие и viewmodel, которые вы используете.
Member 14625279
Извиняюсь. Я редактирую.