我需要传递对象列表。我正在传递抛出的数据ajax调用,ajax按预期返回结果,因此ajax调用获得了正确的结果,但不会呈现部分视图。
控制器
[HttpPost]
public ActionResult GetXlFile()
{
List<ListMatchDetails> lstPreview = new List<ListMatchDetails>();
if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
var xlFile = System.Web.HttpContext.Current.Request.Files["FileToPreview"];
HttpPostedFileBase filebase = new HttpPostedFileWrapper(xlFile);
if (null != filebase && filebase.ContentLength > 0)
{
if (String.Compare(filebase.ContentType, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", true, System.Globalization.CultureInfo.InvariantCulture) == 0)
{
using (Stream stream = filebase.InputStream)
{
IExcelDataReader reader = null;
if (filebase.FileName.EndsWith(".xls"))
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (filebase.FileName.EndsWith(".xlsx"))
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
reader.IsFirstRowAsColumnNames = true;
DataSet dsResult = reader.AsDataSet();
DataTable dtResult = dsResult.Tables[0];
if (dtResult.Rows.Count > 0)
{
foreach (DataRow dr in dtResult.Rows)
{
ListMatchDetails lmd = new ListMatchDetails();
lmd.FirstName = (dr[0] != DBNull.Value) ? dr[0].ToString() : string.Empty;
lmd.LastName = (dr[1] != DBNull.Value) ? dr[0].ToString() : string.Empty;
lstPreview.Add(lmd);
}
}
reader.Close();
}
}
}
}
return PartialView("_ExcelGrid", lstPreview);
}视图
@using app.Models;
@model IEnumerable<ListMatchDetails>
@{
if (Model.Count() > 0)
{
ListMatchDetails row = Model.FirstOrDefault();
<table class="table table-hover table-responsive scrollable table-striped ">
<thead id="tableHeader">
<tr>
<td>
@Html.LabelFor(x => row.FirstName)
</td>
<td>
@Html.LabelFor(x => row.LastName)
</td>
</tr>
</thead>
<tbody class="pre-scrollable">
@foreach (var record in Model)
{
<tr>
<td>
@Html.ValueForModel(record.FirstName)
</td>
<td>
@Html.ValueForModel(record.LastName)
</td>
</tr>
}
</tbody>
</table>
}
}jquery:
$('#btnPreview').click(function () {
var formData = new FormData();
var files = $("#btnbrowse").get(0).files;
if (files.length > 0) { formData.append("FileToPreview", files[0]); }
$.ajax({
url: '/ListMatch/GetXlFile',
type: 'POST',
dataType: 'json',
data: formData,
processData: false,
contentType: false,
success: function (result) {
//$('#record').html(result)
$('._ExcelGrid').json(result);
},
error: function () {
//alert('Click Called');
}
});
});发布于 2017-06-02 02:58:44
立即将您的操作方法与JSON调用进行比较,看起来您正在尝试将ajax调用的结果解析为jQuery字符串,但您返回的是_ExcelGrid分部视图。除非_ExcelGrid分部视图返回的是有效的JSON,否则当它试图将其解析为JSON时,就会中断。
我不知道应该是什么样子,因为我不确定您的视图中的._ExcelGrid是什么,但一般来说,您可以更改操作方法以返回JSON而不是部分视图,然后在客户端解析/处理JSON,或者使用$("._ExcelGrid").html(result)将返回的部分视图分配给元素。你用哪种方式处理它是你自己的事。
如果您选择返回局部视图,出于完成的考虑,我会将ajax调用中的dataType更改为html,因为您不再需要JSON。您可能还希望将contentType设置为要发送到服务器的内容类型,如果不显式,您可能偶尔会遇到有趣的错误。
发布于 2017-06-02 02:53:31
看起来你需要使用$('#record').html(result)。确保你有像这样的东西
<div id="record">
</div>发布于 2017-06-02 04:10:39
这会让你越过路障。如果您想要我添加更多与您的问题相关的代码,请让我知道。
_ExcelGrid.cshtml
A Partial View控制器:
public class HomeController : Controller
{
[HttpPost]
public PartialViewResult GetXlFile()
{
return PartialView("_ExcelGrid");
}
public ActionResult GetXlFile(int? id)
{
return View();
}查看:
@{
Layout = null;
}
<!DOCTYPE html>
@*credit to
https://stackoverflow.com/questions/5410055/using-ajax-beginform-with-asp-net-mvc-3-razor*@
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index800</title>
<script src="~/Scripts/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function () {
$('form').submit(function (event) {
$.ajax({
url: this.action,
type: "POST",
data: $(this).serialize(),
success: function (result) {
$('#result').html(result);
}
});
return false;
});
});
</script>
</head>
<body>
<form>
<div>
@using (Html.BeginForm())
{
<input type="submit" value="OK" />
}
<div id="result"></div>
</div>
</form>
</body>
</html>https://stackoverflow.com/questions/44314461
复制相似问题