无法使用 Bootstrap table 中的 jQuery 设置数据 url 值

Unable to set data-url value using jQuery in Bootstrap table

我检查了你的例子,它在你的例子中工作,但是当我在我的例子中尝试它时,它不起作用。我不知道我在哪里犯了错误。是不是我使用的是旧的 jQuery 文件?我在这里发布整个 HTML 代码。

HTML 代码

@{
    Layout = null;
}


<!DOCTYPE html>
<html>
<head>
    <title>Refresh method with new url</title>
    <meta charset="utf-8">
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
    <link href="~/Content/bootstrap-table.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    <script src="~/Scripts/bootstrap-table.js"></script>
</head>
<body>
    <div class="container">
        <div class="ribbon">
            <a href="https://github.com/wenzhixin/bootstrap-table-examples/blob/master/409.html">View Source on GitHub</a>
        </div>
        <h1>Refresh method with new url(<a href="https://github.com/wenzhixin/bootstrap-table/issues/409">#409</a>).</h1>
        <div class="toolbar">
            <button id="refresh" class="btn btn-default">Refresh</button>
        </div>
        <table id="table"
               data-toggle="table"
               data-toolbar=".toolbar"
               data-url='/Report/GetShipments'>
            <thead>
                <tr>
                    <th data-field="id">ID</th>
                    <th data-field="name">Item Name</th>
                    <th data-field="price">Item Price</th>
                </tr>
            </thead>
        </table>
    </div>
    <script>
        var $table = $('#table');
        $(function () {
            $('#refresh').click(function () {
                $table.bootstrapTable('refresh', {
                    url: '/Report/ShowShipment'
                });
            });
        });
    </script>
</body>
</html>

控制器代码。

public class ReportController : Controller
    {
        // GET: Report
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult GetShipments()
        {
            //IShipments shipments = new ShipmentsClient();
            //var data = shipments.GetShipments(string.Empty, string.Empty, string.Empty, string.Empty);
            //return Json(data, JsonRequestBehavior.AllowGet);

            return Json("test" , JsonRequestBehavior.AllowGet);
            //return new Json()
        }

        public ActionResult ShowShipment()
        {
            //IShipments shipments = new ShipmentsClient();
            //var data = shipments.GetShipments(string.Empty, string.Empty, string.Empty, string.Empty);
            //return Json(data, JsonRequestBehavior.AllowGet);

            return Json("test", JsonRequestBehavior.AllowGet);
            //return new Json()
        }

        public ActionResult Test()
        {
            return View();
        }

    }

当页面加载并命中controller中的GetShipment()方法,然后我们点击刷新按钮,应该会命中ShowShipment()方法,可惜总是命中[=5] =] 方法。我不知道我犯了什么错误。

我想你正在寻找数据函数 http://api.jquery.com/data/

$('#mytable').data('url', 'yoururl')

编辑:

好吧我仔细看了看:

  • 您有两个包含 bootstrap-table.css
  • Bootstrap 文件没有像 jQuery 那样包含,它们是否包含在其他地方?
  • 您在 javascript 控制台中收到错误消息吗?

成功了:

<html>
<head>
</head>
<body>
<style type="text/css">
    .the-legend {
        border-style: none;
        border-width: 0;
        font-size: 14px;
        line-height: 20px;
        margin-bottom: 0;
    }

    .the-fieldset {
        border: 2px groove threedface #444;
        -webkit-box-shadow: 0px 0px 0px 0px #000;
        box-shadow: 0px 0px 0px 0px #000;
    }
</style>

<div class='form-horizontal well'>
    <fieldset class="well the-fieldset">
        <legend class="the-legend"><span class="h3">Shipment Filter Criteria</span></legend>
        <div class='row'>
            <div class='col-sm-3'>
                <div class='form-group'>
                    <label for="user_locale">Carrier</label>
                    <select class="form-control" style="width:200px;" id="user_locale" name="user[locale]">
                        <option value="None" selected="selected">Select Carrier Type</option>
                        <option value="UPS">UPS</option>
                        <option value="USPS">USPS</option>
                        <option value="FEDEX">FEDEX</option>
                    </select>
                </div>
            </div>
            <div class='col-sm-3'>
                <div class='form-group'>
                    <label for="user_locale">Package Type</label>
                    <select class="form-control" style="width:200px;" id="user_locale" name="user[locale]">
                        <option value="None" selected="selected">Select Package Type</option>
                        <option value="UPS">UPS</option>
                        <option value="USPS">USPS</option>
                        <option value="FEDEX">FEDEX</option>
                    </select>
                </div>
            </div>
        </div>
        <div class='row'>
            <div class='col-sm-3'>
                <div class='form-group'>
                    <label for="user_locale">Shipped Date</label>
                    <input class="form-control" style="width:200px;" data-provide="datepicker" id="shippedDate" />
                </div>
            </div>
            <div class='col-sm-3'>
                <div class='form-group'>
                    <label for="user_locale">Schedule Date</label>
                    <input class="form-control" style="width:200px;" data-provide="datepicker" id="scheduleDate" />
                </div>
            </div>
            <div class='col-sm-6'>
                <div>
                    <button style="width:150px;height:38px;margin-top:25px;" class="btn btn-primary"
                            onclick="getShipmens()">
                        View Report
                    </button>
                </div>
            </div>
        </div>
    </fieldset>
    <div class="row">
        <br />
        <table id="table-javascript"></table>
        <table id="mytable" data-url='@Url.Action("GetShipments", "Report", new { carrierType = "UPS", shippedDate = "01/12/14" , scheduleDate = "01/12/14" }, null)' data-toggle="table">
            <thead>
                <tr>
                    <th data-field="Id" data-sortable="True">Id</th>
                    <th data-field="TrackingNr" data-sortable="True">Tracking Nr</th>
                    <th data-field="Carrier" data-sortable="True">Carrier</th>
                    <th data-field="PackageType" data-sortable="True">Package Type</th>
                    <th data-field="ShippedDate" data-sortable="True">Shipped Date</th>
                    <th data-field="ScheduledDate" data-sortable="True">Scheduled Date</th>
                    <th data-field="ActivityZip" data-sortable="True">Activity Zip</th>
                    <th data-field="ActivityState" data-sortable="True">Activity State</th>
                </tr>
            </thead>
        </table>
    </div>

    <script src="./Scripts/jquery.min.js"></script>
    <script src="./Scripts/bootstrap-table.min.js"></script>
    <link rel="stylesheet" href="./Content/bootstrap-table.min.css">
    <script src="./Scripts/bootstrap.min.js"></script>
    <link rel="stylesheet" href="./Content/bootstrap.min.css">


    <script type="text/javascript">
    // When the document is ready
    $(document).ready(function () {

        $('#shippedDate').datepicker({
            format: "dd/mm/yyyy"
        });

        $('#scheduleDate').datepicker({
            format: "dd/mm/yyyy"
        });

    });

    function getShipmens() {

        alert($('#mytable').data('url'));

        $('#mytable').data('url', '@Url.Action("GetShipments", "Report")');

        alert($('#mytable').data('url'));

        $('#mytable').bootstrapTable('refresh');
    }

</script>
</div>
</body>
</html>

您可以使用刷新方法:

$table.bootstrapTable('refresh', {
    url: 'new url'
});

我在这里添加了一个例子:http://issues.wenzhixin.net.cn/bootstrap-table/#issues/409.html

文档:http://bootstrap-table.wenzhixin.net.cn/documentation/#methods

希望能帮到你。

set/change data-url of bootstrap table 的最佳方法是将刷新方法与 refreshOptions 一起使用:

$table.bootstrapTable('refreshOptions', {url: 'new url'});
$table.bootstrapTable('refresh', {url: 'new url'});

如果您不执行 refreshOptions,那么 BootstrapTable 仍将使用 Old url 进行下一次刷新。例如,当服务器端启用时 pagination/sorting/search。

如果需要添加loader图标,则在调用refresh方法之前添加,并通过onLoadSuccess、onLoadError事件删除loader图标。