【发布时间】:2018-07-27 18:21:26
【问题描述】:
设置方式是, - 有一个需要 CSV 上传的视图 - 有一个控制器部分视图操作,它应该检索解析 CSV 并从 CSV 读取对象并将其传递回部分视图。 - 部分视图应该在包含所有记录的页面上呈现。
但显然 bulkClients 对象显示为空。
这里是控制器:-
public ActionResult UploadBulkClients()
{
return View();
}
// [HttpPost]
public PartialViewResult _UploadBulkClients(HttpPostedFileBase bulkClients)
{
if (bulkClients != null)
{
try
{
StreamReader reader = new StreamReader(bulkClients.InputStream);
while (reader != null)
{
var csv = new CsvReader(reader);
csv.Read();
csv.ReadHeader();
while (csv.Read())
{
newRecord.Add(new ClientAgencyViewModel()
{
Id = UrbanLighthouse.Shared.Statics.NewUniqueGUID(),
ReferenceNo = csv["ReferenceNo"].ToString(),
FirstName = csv["FirstName"].ToString(),
MiddleName = csv["MiddleName"].ToString(),
LastName = csv["LastName"].ToString(),
StreetAddress = csv["StreetAddress"].ToString(),
City = csv["City"].ToString(),
PostalCode = csv["PostalCode"].ToString(),
Province = Guid.Parse(csv["Province"].ToString()),
Phone = csv["Phone"].ToString(),
Email = csv["Email"].ToString()
});
}
foreach (var item in newRecord)
{
if (repository.DoesEmailExist(item.Email) == true)
{
item.Email = item.Email + " : " + "Invalid Email Address";
}
else
{
item.Email = item.Email + " : " + "This Email is Good";
}
}
}
return PartialView(newRecord);
}
catch (System.IO.IOException e)
{
return PartialView(e);
}
}
else
{
newRecord.Add(new ClientAgencyViewModel()
{
ReferenceNo = "Empty",
FirstName = "Empty",
MiddleName = "Empty",
LastName = "Empty",
StreetAddress = "Empty",
City = "Empty",
PostalCode = "Empty",
Province = Guid.Empty,
Phone = "Empty",
Email = "Empty"
});
return PartialView(newRecord);
}
}
这是视图的布局方式:- @model 字符串 @{ 布局 = "~/Views/Shared/_LayoutAnonymous.cshtml"; AjaxOptions 选项 = 新的 AjaxOptions { UpdateTargetId = "上传列表", InsertionMode = InsertionMode.Replace, HttpMethod = "POST" }; }
<div>
@using (Ajax.BeginForm("_UploadBulkClients", "Client",options, new { enctype = "multipart/form-data" , role = "form", @class = Css.Form, @id = "formLogin" , action = "/Client/_UploadBulkClients" }))
{
<div class="@Css.FormGroup">
<h1>Client Bulk Upload</h1>
<div class="@Css.InputGroup">
<label>Upload CSV File</label>
<input type="file" name="postedFile" />
</div>
<div class="@Css.InputGroup">
@Html.Submit("Submit")
</div>
</div>
}
</div>
<div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Reference No</th>
<th>FirstName</th>
<th>MiddleName</th>
<th>LastName</th>
<th>Phone</th>
<th>Email</th>
<th>StreetAddress</th>
<th>City</th>
<th>PostalCode</th>
<th>Province</th>
</tr>
</thead>
<tbody id="uploadList">
@Html.Action("_UploadBulkClients","")
</tbody>
</table>
</div>
当 HttpPost 装饰器留在 PartialView 方法之上时,它会在 View @Html.Action("_UploadBulkClients","") 中给出错误,表示 _UploadBulkClients 操作方法不存在。
编辑:- 似乎上传没有发布 csv 文件,我不明白为什么会这样,因为 Ajax 表单似乎是它应该的方式。
任何帮助将不胜感激!
【问题讨论】:
-
您无法使用
Ajax.BeginForm()上传文件。使用FormData- 参考this answer -
@StephenMuecke 我有点糊涂,不知道FormData怎么用,你说的
you can serialize the model to FormData using是什么意思 -
var formdata = new FormData($('form').get(0)); -
只需使用我给你的链接中的代码 :) 但是你的文件输入被命名为
postedFile这意味着你的 POST 方法中的参数需要匹配 - 即HttpPostedFileBase postedFile -
如果我懂 javascript,我不会问,我需要你向我解释如何使用 FormData,或者给我一个链接,因为我还是 ASP.NET MVC 的新手,仍然学习。 JavaScript 仍然是我需要坐下来学习的东西,如何使用它!
标签: asp.net ajax asp.net-mvc asp.net-mvc-partialview