【问题标题】:Jquery Datatables and MVC Form PostJquery 数据表和 MVC 表单发布
【发布时间】:2013-08-26 17:08:29
【问题描述】:

我在表单中有一个表格(项目列表),允许用户对每一行执行一些操作(例如:删除一个项目)。当用户单击提交时,所有行(数据和操作)都被发送到控制器。效果很好。

现在我想向表中添加一些数据表过滤器功能。我让它在视图上工作得很好,但是当我单击提交时,它发送的只是一个空值而不是行数据。我的理解是数据表会修改页面/DOM,并且我需要在提交触发之前将其重新放到页面上。我看到了一些使用数据表 API 函数 fnGetHiddenNodes() 的建议,但我不确定如何在我的页面上执行此操作。任何帮助将不胜感激。

代码

@model IEnumerable<Admin.Models.MemberFeedback>

@{
    ViewBag.Title = "Member Feedback";
}

@Scripts.Render("~/bundles/datatables")

   @using (Html.BeginForm("MemberFeedback", "Admin", FormMethod.Post, new { @id = "processmemberfeedback" }))
    {
        <table class="dynamicTable table table-striped table-bordered table-primary" id="feedbackemails">
            <thead>
                <tr>
                    <th>Date</th>
                    <th>From</th>
                    <th>Feedback</th>
                    <th>Action</th>
                </tr>
            </thead>

            <tbody>
                @Html.EditorForModel()
            </tbody>
        </table>

        <br />
        <input type="submit" value="Submit" id="submit1" class="btn btn-inverse"/>
    }
</div>

<script>
    /* Table initialisation */
    var oJobListingsTable = $('#feedbackemails').dataTable({
        "sPaginationType": "bootstrap",
        "bLengthChange": false,
        "bFilter": false,
        "oLanguage": {
            "sEmptyTable": "No records found.",
            "sLengthMenu": "Rows: _MENU_",
            "sSearch": "Filter: "
        },
        "iDisplayLength": 10,
    });
</script>

如何让 jquery 数据表表单正确回传到控制器(而不是发送空值)?

13 年 8 月 29 日更新

我遵循 abc123 的建议,我可以让它序列化隐藏字段中的字符串。但是,我仍然无法将其发回我的控制器。我尝试了以下方法:

[HttpPost]
public ActionResult MemberFeedback(IEnumerable<MemberFeedback> memberfeedbacks, string dataTableFiltered)
{ ...}

[HttpPost]
public ActionResult MemberFeedback(string dataTableFiltered)
{ ...}

但是这两个都给了我 dataTableFiltered 的空值。我确定我在这里做了一些愚蠢的事情。

【问题讨论】:

  • 显示代码或者它没有发生,也推荐使用jsfiddle.net
  • @MikeSmith 你找到解决这个问题的方法了吗?我在这里也面临同样的问题和问题stackoverflow.com/questions/31404587/…
  • @Jmat 我想我从来没有找到解决它的方法。我记得我们只是没有对那个特定的数据表使用过滤。很抱歉没有提供太多帮助

标签: jquery asp.net-mvc-4 datatables


【解决方案1】:

jQuery DataTables 1.9 及更高版本

使用的链接

  1. DataTables Example for Form Submission
  2. How to get filtered Data
  3. JSON2 array serializing

代码:

@model IEnumerable<Admin.Models.MemberFeedback>

@{
    ViewBag.Title = "Member Feedback";
}

@Scripts.Render("~/bundles/datatables")

   @using (Html.BeginForm("MemberFeedback", "Admin", FormMethod.Post, new { @id = "processmemberfeedback" }))
    {
        <table class="dynamicTable table table-striped table-bordered table-primary" id="feedbackemails">
            <thead>
                <tr>
                    <th>Date</th>
                    <th>From</th>
                    <th>Feedback</th>
                    <th>Action</th>
                </tr>
            </thead>

            <tbody>
                @Html.EditorForModel()
            </tbody>
        </table>

        <br />
        <input type="hidden" id="dataTableFiltered">
        <input type="submit" value="Submit" id="submit1" class="btn btn-inverse"/>
    }
</div>

<script type='text/javascript'>
    $('#MemberFeedback').submit( function() {
        $('#dataTableFiltered').val(JSON.stringify(oTable._('tr', {"filter":"applied"})));
    });

    /* Table initialisation */
    var oJobListingsTable = $('#feedbackemails').dataTable({
        "sPaginationType": "bootstrap",
        "bLengthChange": false,
        "bFilter": false,
        "oLanguage": {
            "sEmptyTable": "No records found.",
            "sLengthMenu": "Rows: _MENU_",
            "sSearch": "Filter: "
        },
        "iDisplayLength": 10,
    });
</script>

说明

oTable._('tr', {"filter":"applied"})

从应用了过滤器的数据表中返回数据。

JSON.stringify(oTable._('tr', {"filter":"applied"}))

返回上面的 JSON 字符串。

$('#dataTableFiltered').val(JSON.stringify(oTable._('tr', {"filter":"applied"})));

dataTableFiltered隐藏输入的值设置为上述。

注意:这里使用JSON2.js plugin

【讨论】:

  • 我按照您的解决方案,看到序列化字符串位于 dataTableFiltered 隐藏字段中。您能帮我了解如何将其发回控制器吗?
  • @MikeSmith 如果您的模型中有该字段,那应该会发生。由于您正在提交它并且它在输入中。只需要让模型捕获信息:)
  • 德拉特。还是行不通。在上面添加了一些代码来显示我的控制器的样子。
  • @MikeSmith install fiddler2 然后单击提交并查看哪些数据发布到哪个 URL...这是查看断开连接位置的最简单方法。我的意思是向MemberFeedback 添加一个字符串,然后它会在返回时将其添加到该模型中。在视图中输入@MemberFeedback.stringName的值
【解决方案2】:
$('#frmInventario').submit(function () {
                debugger;
               var oTable =  $('#TableId').dataTable();
                oTable.fnFilter("");
                var oSettings = oTable.fnSettings();
                oSettings._iDisplayLength = -1;
                oTable.fnDraw();


            });

【讨论】:

    猜你喜欢
    • 2016-04-24
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多