显示上传的数据到MVC视图并将选定的记录导入数据库

时间:2016-05-10 18:52:51

标签: c# asp.net-mvc-4 datatable postback

我需要将用户上传的CSV数据导入数据库。 脚步 - 1.用户将数据上传到MVC View 2.在视图中显示所有上传的数据 3.用户可以根据导入的值选择列名 3.根据用户对记录的选择导入数据。

为实现这一点,我创建了以下模型 -

public class ImportCSVData
{      
    public IEnumerable<System.Web.Mvc.SelectListItem> Names { get; set;}    // This is to display dynamic column      
    public HttpPostedFileBase File { get; set; }     
    public DataTable Data { get; set; }  
}  

在控制器中,我正在解析上传的文件(示例代码)

    public ActionResult ImportCSVCustomer()
    {
        ImportCSVData model = new ImportCSVData();
        HttpPostedFileBase upfile = Request.Files["File"];
        model.File = upfile;            
            var dt = ParseCSVData(model);
            if (dt != null && dt.Rows.Count > 0)
            {                 
                var dcRec = new DataColumn("ShouldImport", typeof(bool));                 
                dcRec.DefaultValue = false;
                dt.Columns.Add(dcRec);         
                model.Data = dt;
                List<SelectListItem> Names = getColumnNames();
                model.Names = Names;                 
                return PartialView("_ImportedCSVCustomer", model);
            }                      
        return View();
    }

我设计的示例视图 -

   @for (int i = 0; i < Model.Data.Rows.Count; i++)
   {
   <tr>
    <td data-val="@i">
    <input type="checkbox" name="sid" value=@Model.Data.Rows[i][Model.Data.Columns.Count - 1] class="sid">
   </td>
    @for (int j = 0; j < Model.Data.Columns.Count - 1; j++)
    {
     <td>
         @Model.Data.Rows[i][j].ToString()
         @Html.HiddenFor(Model.Data.Rows[i][j].ToString())
     </td>
     }
   </tr>
   }

我正在处理要显示的视图,但是,在从View发布到Controller之后无法获取模型值。 知道如何实现这个吗?

1 个答案:

答案 0 :(得分:0)

您需要在return语句中传递模型。所以你需要:

return View(model)

然后在视图中,您必须确保通过位于.cshtml文件的顶部来实现该视图

@model xxx.ImportCSVData

xxx是名称空间。

老实说,我也将[HttpPost]置于控制器之上,以确保您只能发布到它并且我使用AntiForgeryToken。 http://peterkellner.net/2014/05/19/asp-net-mvc-forms-need-include-html-antiforgerytoken-security/