0
  1. 我有一些数据通过 Ajax 绑定加载到 Kendo 网格中。
  2. 在其中一列中有一个调用 javascript 方法 (showAll) 的 ClientTemplate。
  3. 此方法将调用一个动作并获取数据的详细信息,将其放入 json 响应中,然后打开一个 jquery-ui 对话框以显示详细信息。
  4. 当用户单击网格中的链接时,会为 GetDetails 操作触发 HttpGet,但问题是,它也会为整个页面的操作(索引)触发。

我想,问题是什么导致了索引操作被触发?因为,对话框将显示,详细数据将填充,但一旦我关闭对话框,所有过滤器文本框将被重置,网格将重新加载,其中的数据。

唯一调用的操作不应该是 GetDetails 吗?

任何提示将不胜感激!

代码:

@(Html.Kendo().Grid<LogViewModel>()
    .Name("LogGrid")
    .Columns(column =>
    {
        column.Bound(x => x.StuffCount).Title("Stuff").Width(70)
            .ClientTemplate("<a onclick=\"showAll('" + "#= Id #')\"" + " href=''>#= StuffCount #</a>");
    })
    .DataSource(dataBinding => dataBinding
                .Ajax()
                .PageSize(50)
                .Read(read => read.Action("GetData", "Summary")
                    .Data("getSearchFilters"))
                .Model(model => model.Id(o => o.Id)))
            .Events(e => e
                .DataBound("onGridItemsDatabound"))
            .Pageable(paging => paging.Refresh(true))
)}

<div id="dialog-message" title="" style="display: none">
    <p id="msg"></p>    
</div>


<script type="text/javascript">
    var showAll= function (id) {
        var url = '@Url.Action("GetDetails", "Summary")' + "/" + id;
        var sTitle = 'title text';
        $.getJSON(url, null, 
            function (data) {
                $("#dialog-message").dialog({ title: sTitle });
                $("#msg").text(data.details);
                showMessage();        
            });
    };

    var showMessage = function () {
        $("#dialog-message").dialog({
            modal: true,
            draggable: false,
            resizable: false,
            buttons: {
                Ok: function() {
                    $(this).dialog("close");
                }
            }
        });
    };
</script>

控制器方法(为简洁起见删除了内容

public ActionResult Index(...)
{
    ...
}

public ActionResult GetDetails(Guid id)
{
    ... (get data from repository)

    return Json(data, JsonRequestBehavior.AllowGet);
}
4

1 回答 1

1

我在 Telerik 论坛上发布了同样的问题。他们的管理员为我指出了正确的方向:

事实证明,我必须将 void 添加到 href 以调用 javascript 并留在页面上。href="javascript:void(0)"

于 2013-04-08T14:17:33.270 回答