15

模倣したい次のレガシーコードがあり、すべてのアクションリンクが1つの列に含まれています。ただし、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を使用して3つの別々の列を取得することしかできませんでした。

.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構文を使用して、3つのアクションリンクすべてを含む1つのテンプレート列を定義するにはどうすればよいですか?

編集: 以下のマイクの答えの次の小さな適応を試みると、「代入、呼び出し、インクリメント、デクリメント、および新しいオブジェクト式のみをステートメントとして使用できます」というエラーが発生します。

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

5 に答える 5

27

Here is a quick sample showing both bound columns and a template column:

Sample #1 using @<text></text> syntax

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

Sample #2 using an Action delegate

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

Hope that helps, if didn't already figure it out. :)

UPDATE - added the implicitly defined "item" parameter in code sample above. It shows how to get the Model properties within the Telerik control template.
UPDATE#2 - korchev showed the "@item.someProperty" syntax within his code sample. The @ symbol is not needed in our case since we are within an extension method, but doesn't hurt to leave it for clarity. UPDATE#3 - added Sample #2 code sample

于 2010-12-18T03:13:49.380 に答える
2

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

于 2014-07-17T19:55:37.900 に答える
1
columns.Template(@Html.ActionLink("Edit", "Edit", new {id = @item.id }));

@item とは何かについては、Razor に関する ScottGu のブログ投稿を確認してください。

于 2010-12-18T12:34:58.657 に答える
0
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 the id id = m.UserId のようなものが生成されます。DataKeys のように表示できます。

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

                        })

post メソッドで次のようになります。

public ActionResult xxx(int userId)
{
}
于 2013-09-11T11:42:01.527 に答える
0

ヘッダー行に配置する必要がある印刷ボタンがあり、それを同じ列に配置することを選択しましたが、[更新] ボタンがある場所の上に配置しました。次のように、Razorで問題なく実行できました。

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

これは、「Print Grid」がリンク ボタンに表示される場所、「OutputAgencies」がコントローラーのメソッド、「AdminController」がコントローラーの名前です。

于 2014-11-08T02:58:58.710 に答える