Определить столбец Template для сетки Telerik MVC в синтаксисе Razor

У меня есть следующий код устаревшего кода, который я хотел бы подражать, со всеми ссылками действий внутри одного столбца. Однако, похоже, я не могу получить синтаксис Razor. Как я могу выразить это в Razor?

Шаблон столбца ASPX выглядит следующим образом:

.Columns(column =>
{
    column.Template(o =>
        {%>
            <%= Html.ActionLink("Edit", "Edit", new{ id = o.DeviceID}) %> | 
            <%= Html.ActionLink("Delete", "Delete", new { id = o.DeviceID })%>
        <%});

Мне удалось получить три отдельных столбца с помощью Razor без жалоб на синтаксис и т.д., как показано ниже:

.Columns(columns =>
{
    columns.Template(o => @Html.ActionLink("Edit", "Edit", new { id = o.ProductId })).Width(50);
    columns.Template(o => @Html.ActionLink("Details", "Details", new { id = o.ProductId })).Width(50);
    columns.Template(o => @Html.ActionLink("Delete", "Delete", new { id = o.ProductId })).Width(50);

Как я могу определить один столбец шаблонов, содержащий все три ссылки действий с использованием синтаксиса Razor?

РЕДАКТИРОВАТЬ: При попытке следующей небольшой адаптации ответа Майка ниже я получаю сообщение об ошибке "Только назначение, вызов, приращение, декремент и новые выражения объектов могут использоваться как выражение":

columns.Template(o => @<text>@Html.ActionLink("Edit", "Edit", new { id = o.CampaignId }) | 
                        @Html.ActionLink("Delete", "Delete", new { id = o.CampaignId })
                        </text>).Width(100);

Ответы

Ответ 1

Вот пример, который показывает как связанные столбцы, так и столбцы шаблона:

Пример # 1 с использованием синтаксиса @<text></text>

@(Html.Telerik().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(m => m.UserName);
        columns.Bound(m => m.Email);
        columns.Template(@<text> @Html.ActionLink("Edit", "Edit", new { id = item.UserId} ) | 
                                 @Html.ActionLink("Delete", "Delete", new { id = item.UserId)  
                         </text>).Width(100);
    })
 )

Пример № 2 с помощью делегата Action

@(Html.Telerik().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(m => m.UserName);
        columns.Bound(m => m.Email);
        columns.Template(m => @Html.ActionLink("Edit", "Edit", new { id = m.UserId} ) + " | " +
                              @Html.ActionLink("Delete", "Delete", new { id = m.UserId)  
                         ).Width(100);
    })
 )

Надеюсь, что это поможет, если бы не понял этого.:)

UPDATE - добавлен неявно определенный параметр "item" в примере кода выше. Он показывает, как получить свойства модели в шаблоне управления Telerik.
ОБНОВЛЕНИЕ # 2 - korchev показал синтаксис "@item.someProperty" в своем примере кода. Символ @не нужен в нашем случае, так как мы находимся внутри метода расширения, но не больно оставлять его для ясности. ОБНОВЛЕНИЕ # 3 - добавлен образец примера № 2

Ответ 2

columns.Template(@Html.ActionLink("Edit", "Edit", new {id = @item.id }));

Проверьте записи блога ScottGu в отношении Razor для того, что такое @item.

Ответ 3

Если вы привязываетесь к ajax, формат должен выглядеть примерно так:

c.Bound(i => i.Name).ClientTemplate(@Html.ActionLink("<#= Name #>", "[Action]", "[Controller]", new { Id = "<#= Id #>" }, new { Area = "[Area]" }).ToHtmlString())

См. здесь для получения дополнительной информации: http://www.telerik.com/forums/kendo-mvc-grid-actionlink-column

Ответ 4

columns.Command(commands => {
 commands.Custom("Update").Text(Resource.Edit)
 .ButtonType(GridButtonType.BareImage)                                                .SendState(true).SendDataKeys(true).HtmlAttributes(new { id = "popUp"})   
                                              Action("Gallery_Bar_EditOrAddTranslate", "Administration").Ajax(false);
commands.Custom("Update").Text(Resource.Edit)
 .ButtonType(GridButtonType.BareImage)                                                .SendState(true).SendDataKeys(true).HtmlAttributes(new { id = "popUp"})                                                 Action("Gallery_Bar_EditOrAddTranslate", "Administration").Ajax(false);                                  }).Width("5%").Title(Resource.Coomand);

Это создаст что-то вроде action Link id id = m.UserId вы можете показать как DataKeys:

 .Name("GridName")  .DataKeys(key =>
                        {
                            key.Add(c => c.UserId).RouteKey("userId");

                        })

в методе post, который у вас будет:

public ActionResult xxx(int userId)
{
}

Ответ 5

У меня была кнопка печати, которую мне нужно было поместить в строку заголовка, которую я выбрал, чтобы разместить ее в том же столбце, что и выше, где кнопка Обновить. Я смог сделать это просто отлично в Razor вот так:

columns.Command(command => {command.Edit(); }).Width(100).HeaderTemplate(i => @Html.ActionLink("Print Grid", "OutputAgencies", "Admin", new { @class = "k-button" }) );

Вот где "Print Grid" для отображения на моей ссылке, "OutputAgencies" был методом в моем контроллере, а "AdminController" был именем моего контроллера.