我想调用控制器的Action Method并返回Kendo网格行上的View

问题描述 投票:1回答:3

下面是我的kendo网格代码

@(Html.Kendo().Grid<DataSource>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.Quote_ID).Filterable(false);
        columns.Bound(p => p.Ticket_ID).Groupable(true);
        columns.Bound(p => p.Channel).Groupable(true);
        columns.Bound(p => p.Agent_Alias).Groupable(true).Hidden(true);
        columns.Bound(p => p.Shipping_Carrier).Groupable(true).Hidden(true);
        columns.Bound(p => p.Quote_ID).Title("View 
        Details").Groupable(false)

        .Template(@<text>
            @Html.ActionLink("Show Product Details", "GridRowSummary", 
        "GridOrderSummary")</text>);                                                         

    })

从ActionLink我试图调用我的控制器的Action Method。

Below My controller code

public ActionResult GridRowSummary()
    {
        return View();
    }
c# .net asp.net-mvc kendo-grid kendo-asp.net-mvc
3个回答
2
投票

使用Template将在使用Ajax绑定网格时起作用,例如:

columns.Template(c => @Html.ActionLink("GridRowSummary", "GridOrderSummary", new { id = c.Id, }));

如果不使用Ajax绑定网格,请在列上使用ClientTemplate属性,以及显示关联数据的方法(如果需要):

columns.Bound(p => p.Quote_ID).Title("View Details").Groupable(false)
    .ClientTemplate(@Html.ActionLink("#=Quote_ID#", "GridRowSummary", new { ID = "#=ID#" }).ToHtmlString());

还有第三种方法(有点凌乱)允许您添加自定义按钮/图标等,例如:

columns.Bound(p => p.Quote_ID).ClientTemplate("<a href='" + @Url.Action("GridRowSummary", "GridOrderSummary", new { id = "#=Id#" }) + "' class='btn btn-primary'><i class='fa fa-eye'></i>  Link</a>" );

编辑

从浏览FAQ部分,找到一个更整洁的解决方案,您可以传递控制器名称和Quote_ID参数(虽然这种方式确实涉及设置Javascript函数):

columns.Bound(p => p.Quote_ID).ClientTemplate("#= getDetails(data) #");

<script>
function getDetails(data) {
    var action = '@Url.Action("NameOfMethod", "NameOfController")';

    var html = kendo.format("<a href='{0}/{1}'>Link</a>",
        action,
        data.Quote_ID
    );

    return html;
}
</script>

0
投票

对于下面代码的客户端模板。替换是必要的。

columns.Bound(p => p.Quote_ID).Title("View Details").Groupable(false)
             .ClientTemplate(
            @Html.ActionLink("#=Quote_ID#", "Summary", new { Quote_ID = "Id" 
}).ToHtmlString().Replace("Id", "#=Quote_ID#"));

0
投票

这个解决方案适合我。

 .Events(events =>
    {
        events.Change("onRowSelected");
    })

function onRowSelected(e) {
            debugger;
            var gview = $("#grid").data("kendoGrid");
            //Getting selected item
            var selectedItem = gview.dataItem(gview.select());
            var ticketId = selectedItem["Ticket_ID"];
            window.location.href = "/GridOrderSummary/GridRowSummary?
            ticketId=" + ticketId;
        }

//Controller code

public class GridOrderSummaryController:Controller {

// GET: GridOrderSummary
 public ActionResult GridRowSummary(string ticketId)
 {
   // your code
    return View();
 }

}

© www.soinside.com 2019 - 2024. All rights reserved.