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

时间:2017-06-08 12:21:42

标签: c# .net asp.net-mvc kendo-grid kendo-asp.net-mvc

以下是我的剑道网格代码

@(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();
    }

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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#"));

答案 2 :(得分: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();
 }

}