如何在asp.net mvc 中将复杂模型传递回控制器

GlutVonSmark

网络开发新手。我有一个视图,允许用户选择一个 excel 文件。当提交“预览”按钮被按下时,文件被读取并将数据发送回用户以预览数据。然后我希望能够将模型发送回用于数据库上传的控件。(这是我正在努力解决的部分)。

视图模型:

public class UploadItemsViewModel
{
    public List<Item> Items { get; set; }

    public int CompanyID { get; set; }
    public Company Company { get; set; }

    public HttpPostedFileBase upload { get; set; }

    public UploadJournalsViewModel()
    {
        Items = new List<Item>();
    }

}

控制器:

public ActionResult Upload(FormCollection formCollection, int CompanyID)
    {
        if (Request != null)
        {
            HttpPostedFileBase file = Request.Files["UploadedFile"];
            if ((file != null) && (file.ContentLength > 0) && !string.IsNullOrEmpty(file.FileName))
            {
                string fileName = file.FileName;
                string fileContentType = file.ContentType;
                byte[] fileBytes = new byte[file.ContentLength];
                var data = file.InputStream.Read(fileBytes, 0, Convert.ToInt32(file.ContentLength));
            }
        }
        UploadItemsViewModel itmViewModel = new UploadItemsViewModel { Company = db.Companies.Find(CompanyID), CompanyID = CompanyID };
        return View(itmViewModel);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Upload(UploadItemsViewModel itmViewModel, string Preview, string Upload)
    {
        if (ModelState.IsValid)
        {
            if (itmViewModel.upload != null && itmViewModel.upload.ContentLength >0)
            {
                try
                {
                    itmlViewModel.Items = App.Services.ItemsMassUploadFileRead.ReadExcelFile(itmViewModel.upload, db.Companies.Find(itmViewModel.CompanyID));

                    if (string.IsNullOrEmpty(Preview))
                    {
                        foreach (var itm in itmViewModel.Items)
                        {
                            itm.StartDate = DateTime.Today;
                            itm.CompanyID = itmViewModel.CompanyID;
                            itm.User = null;
                            itm.Items.Add(itm);
                            db.SaveChanges();
                        }
                        return View();
                    }
                    else
                    {
                        return View(itmViewModel);
                    }

                   }                    }
                catch (Exception ex)
                {
                    ModelState.AddModelError("File", ex.Message.ToString());
                    return View(itmViewModel);
                }
            }
            else
            {
                ModelState.AddModelError("File", "Please Upload Your file");
            }
        }
        return View(itmViewModel);
    }

看法:

 @using (Html.BeginForm("Upload", "ItemsUpload", null, FormMethod.Post,  new { enctype = "multipart/form-data" }))

{@Html.AntiForgeryToken() @Html.HiddenFor(model => model.CompanyID)

<div class="form-group">
    <div class="input-group">
        <label class="input-group-btn">
            <span class="btn btn-default">
                Browse&hellip; <input type="file" style="display: none;" accept=".xlsx" name="upload">
            </span>
        </label>
        <input type="text" class="form-control " readonly>
    </div>
    <span class="help-block">
        Please use a provided Excel template
    </span>
</div>
<div class="form-group">
    <input type="submit" value="Preview" name ="Preview" class="btn btn-default" disabled style="display: none" id="submit"/>
</div>
<div class="form-group">
    <input type="submit" value="Upload" name="Upload" class="btn btn-default" id="Upload" />
</div>

<div class="help-block" id="previewHelp" style="display: none">
    Preview results and scroll down to upload data to the database.
</div>



if (Model.Journals.Count != 0)
{
  table here to preview the upload
}

单击上传按钮后,模型返回时没有“项目”集合。

马吉迪赛比

Items列表将始终null在控制器中,因为您没有在具有名称的视图上呈现任何输入Items

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Asp.Net MVC:为什么我的视图将NULL模型传递回控制器?

ASP.NET Core MVC-从视图将模型数据传递回控制器

无法将模型从 ASP.NET MVC 中的视图传递回控制器。收到时模型为空

在ASP.NET MVC中将模型从View传递给控制器

如何在ASP .NET MVC中将特定行的值传递给控制器方法

Asp.Net Core MVC-复杂模型在“获取控制器”操作上未绑定

如何在ASP.NET MVC控制器参数中将毫秒转换为DateTime

如何在asp.net core mvc中将客户服务与控制器解耦

如何在ASP.NET MVC中的控制器中调用模型方法

如何在ASP.NET MVC中从控制器传递列表以进行查看?

如何通过.Net MVC4中带有JSON的ajax调用将复杂的视图模型传递到控制器动作中?

在 asp.net mvc 中将数据从视图传递到控制器失败

ASP.NET MVC使用Ajax将整个模型传递给控制器

从控制器检索图像路径并传递给 HttpPostedFileBase 图像模型 ASP.Net MVC

asp.net mvc 如何将视图模型和输入文本传递给控制器?

如何在ASP.NET MVC 4和MVC 5中设置默认控制器

如何在ASP.NET MVC4 Api控制器中将视图呈现为字符串

如何在 Asp.NET Core MVC 应用程序中将 Json 返回从控制器发送到前端?

将空列表从控制器传递到控制器ASP.NET MVC

ASP.Net MVC 5在表单发布时将初始模型参数传递给控制器

Asp.Net MVC5-通过jqGrid将嵌套模型从视图传递到控制器

ASP.Net MVC如何在控制器操作中从布局访问隐藏字段

如何在使用ASP .NET MVC的方法之间正确共享控制器中的对象?

我如何在Asp.net Core MVC的控制器中获得自己的用户

如何在URL中更改ASP.NET MVC控制器名称?

如何在ASP.NET MVC控制器中获取URL

如何在ASP.NET MVC 6中添加基本控制器

如何在ASP.net MVC 5中限制对控制器操作的访问

如何在ASP.Net MVC中模拟控制器上的请求?