0
  1. Ajax バインディングを介して剣道グリッドにロードするデータがあります。
  2. 列の 1 つに、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 フォーラムに投稿しました。彼らの管理者は私を正しい方向に向けました:

javascriptを呼び出してページにとどまるには、hrefにvoidを追加する必要がありました。href="javascript:void(0)"

于 2013-04-08T14:17:33.270 に答える