Kendo UI Grid - 调用MVC Url.Action的ClientTemplate调用(错误地)两个不同的动作

时间:2013-04-05 22:51:21

标签: json asp.net-mvc-4 kendo-ui jquery-ui-dialog kendo-grid

  1. 我有一些数据通过Ajax绑定加载到Kendo网格中。
  2. 在其中一个列中有一个调用javascript方法的ClientTemplate(showAll)。
  3. 此方法将调用操作并获取数据的详细信息,将其放入json响应中,然后打开jquery-ui对话框以显示详细信息。
  4. 当用户点击网格中的链接时,会触发HttpGet以进行GetDetails操作,但问题是,它也会触发整个页面的操作(索引)。
  5. 我想,问题是导致索引操作被触发的原因是什么?因为,对话框将显示,详细数据将填充,但一旦我关闭对话框,所有过滤器文本框将被重置,网格将重新加载并且其中的数据。

    不应该只调用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);
    }
    

1 个答案:

答案 0 :(得分:1)

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

原来我必须将空格添加到href以调用javascript并保留在页面上。 HREF = “JavaScript的:无效(0)”