Определить столбец Шаблон для Telerik MVC Grid в синтаксисе Razor - PullRequest
15 голосов
/ 16 декабря 2010

У меня есть следующий унаследованный код, который я хотел бы имитировать, со всеми ссылками действий внутри одного столбца.Тем не менее, я не могу понять синтаксис 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);

Ответы [ 5 ]

27 голосов
/ 18 декабря 2010

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

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

2 голосов
/ 17 июля 2014

Если вы связываете с 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

1 голос
/ 18 декабря 2010
columns.Template(@Html.ActionLink("Edit", "Edit", new {id = @item.id }));

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

0 голосов
/ 08 ноября 2014

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

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

Именно здесь «Print Grid» отображался на моей кнопке ссылки, «OutputAgencies» был методом в моем контроллере, а «AdminController» был именем моего контроллера.

0 голосов
/ 11 сентября 2013
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);

Это сгенерирует что-то вроде действия. Ссылка идентификатор id = m.UserId вы можете показать как DataKeys:

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

                        })

при почтовом методе у вас будет:

public ActionResult xxx(int userId)
{
}
...