首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ajax调用后不会呈现部分视图

ajax调用后不会呈现部分视图
EN

Stack Overflow用户
提问于 2017-06-02 02:16:37
回答 4查看 1.4K关注 0票数 0

我需要传递对象列表。我正在传递抛出的数据ajax调用,ajax按预期返回结果,因此ajax调用获得了正确的结果,但不会呈现部分视图。

控制器

代码语言:javascript
运行
复制
[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);
}

视图

代码语言:javascript
运行
复制
@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:

代码语言:javascript
运行
复制
$('#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');
                    }
                });
            });
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-02 02:58:44

立即将您的操作方法与JSON调用进行比较,看起来您正在尝试将ajax调用的结果解析为jQuery字符串,但您返回的是_ExcelGrid分部视图。除非_ExcelGrid分部视图返回的是有效的JSON,否则当它试图将其解析为JSON时,就会中断。

我不知道应该是什么样子,因为我不确定您的视图中的._ExcelGrid是什么,但一般来说,您可以更改操作方法以返回JSON而不是部分视图,然后在客户端解析/处理JSON,或者使用$("._ExcelGrid").html(result)将返回的部分视图分配给元素。你用哪种方式处理它是你自己的事。

如果您选择返回局部视图,出于完成的考虑,我会将ajax调用中的dataType更改为html,因为您不再需要JSON。您可能还希望将contentType设置为要发送到服务器的内容类型,如果不显式,您可能偶尔会遇到有趣的错误。

票数 0
EN

Stack Overflow用户

发布于 2017-06-02 02:53:31

看起来你需要使用$('#record').html(result)。确保你有像这样的东西

代码语言:javascript
运行
复制
<div id="record">

</div>
票数 0
EN

Stack Overflow用户

发布于 2017-06-02 04:10:39

这会让你越过路障。如果您想要我添加更多与您的问题相关的代码,请让我知道。

_ExcelGrid.cshtml

代码语言:javascript
运行
复制
A Partial View

控制器:

代码语言:javascript
运行
复制
public class HomeController : Controller
{
    [HttpPost]
    public PartialViewResult GetXlFile()
    {
        return PartialView("_ExcelGrid");
    }

    public ActionResult GetXlFile(int? id)
    {
        return View();
    }

查看:

代码语言:javascript
运行
复制
@{
    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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44314461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档