我有以下遗留代码我想模仿,所有操作链接都在一列中。但是,我似乎无法正确使用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语法定义包含所有三个操作链接的一个模板列?
编辑:在尝试以下对Mike的答案的小改编时,我得到错误“只有赋值,调用,递增,递减和新对象表达式可以用作语句”:< / p>
columns.Template(o => @<text>@Html.ActionLink("Edit", "Edit", new { id = o.CampaignId }) |
@Html.ActionLink("Delete", "Delete", new { id = o.CampaignId })
</text>).Width(100);
答案 0 :(得分:27)
以下是显示绑定列和模板列的快速示例:
使用@<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);
})
)
使用Action委托
的示例#2@(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控件模板中获取Model属性 UPDATE#2 - korchev在他的代码示例中显示了“@ item.someProperty”语法。在我们的案例中不需要@符号,因为我们在扩展方法中,但为了清楚起见,不要伤害它。 更新#3 - 添加了样本#2代码示例
答案 1 :(得分: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
答案 2 :(得分:1)
columns.Template(@Html.ActionLink("Edit", "Edit", new {id = @item.id }));
查看ScottGu关于Razor的博文文章,了解@item是什么。
答案 3 :(得分: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);
这会产生类似动作链接的内容 id id = m.UserId你可以像DataKeys一样显示:
.Name("GridName") .DataKeys(key =>
{
key.Add(c => c.UserId).RouteKey("userId");
})
在post方法中你会得到:
public ActionResult xxx(int userId)
{
}
答案 4 :(得分:0)
我有一个打印按钮,我需要放入Header行,我选择放在同一列中,但高于Update按钮的位置。我能够在Razor中做得很好,就像这样:
columns.Command(command => {command.Edit(); }).Width(100).HeaderTemplate(i => @Html.ActionLink("Print Grid", "OutputAgencies", "Admin", new { @class = "k-button" }) );
这就是&#34; Print Grid&#34;是为了在我的链接按钮上显示,&#34;输出代理商&#34;是我的控制器中的一个方法,&#34; AdminController&#34;是我的控制器的名字。