我需要将用户上传的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之后无法获取模型值。 知道如何实现这个吗?
答案 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/