使用ASP.Net MVC 2和Telerik MVC(2010 Q1)在Telerik网格中添加编辑列

6

我已经成功地创建了一个Telerik网格来显示产品列表,但是在添加列以允许用户编辑方面遇到了一些困难(我甚至不想在网格内进行编辑-我只想要一个指向编辑视图的链接)。

当我添加自定义列时,在调试时我的错误屏幕上出现以下行(第24行为红色):

Line 22:                          columns.Add(o => o.ProductIsActive);
Line 23:                          columns.Template(o =>
Line 24:                          {
Line 25:                              
Line 26:                              %><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");

我的编译器错误信息是:编译器错误信息:CS1525:无效的表达式项“)”

这是我的视图代码:

<%= Html.Telerik().Grid<NationalPetVax.Models.Product>()
          .Ajax(ajax => ajax.Action("_Index", "Products"))
          .DataKeys(dataKeys => dataKeys.Add(c => c.ProductID))
          .DataBinding(dataBinding => dataBinding.Ajax().Update("Update", "Home"))

          .Name("Grid")
                 .Columns(columns =>
                 {
                     columns.Add(o => o.ProductName).Width(81);
                     columns.Add(o => o.ProductPrice).Width(200);
                     columns.Add(o => o.ProductType.ProductTypeName);
                     columns.Add(o => o.Specy.SpeciesName);
                     columns.Add(o => o.ProductIsActive);
                     columns.Template(o =>
                     {

                         %><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");

                     })
          .Sortable()
          .Scrollable()
          .Pageable();
    %>

有人遇到过这个问题吗?我已经反复按照教程操作了,但是现在正考虑放弃telerik网格控件,尽管我非常喜欢它并希望将其包含在我的项目中。

5个回答

6

我不熟悉Telerik。但看起来问题出在表达式内的闭合/开放标签上。尝试使用以下代码:

columns.Template(o =>
              { 
                  Response.Write(Html.ActionLink("Edit", "Edit", 
                  new { id = o.ProductID })); 
              }).Title("Edit");

最佳答案是由于似乎正确的解决方案存在问题:columns.Bound(o => o.Id).Format(Html.ActionLink("编辑", "Edit", new { id = "{0}" }).ToHtmlString()); - 它将HTML呈现为字符串。 - Merritt
@Merritt - 要使用该解决方案,您需要关闭HTML编码:Format(Html.ActionLink("Edit", "Edit", new { id = "{0}" }).ToHtmlString()).Encoded(false); - Daniel

5
如果您想在代码中保留"鳄鱼标签",请按如下方式操作:
columns.Template(o =>
                     {

                         %><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");

                     })

您只需要更改调用的方式。在顶部您正在执行一个

操作。
<%=

将其更改为:

<%

只需要调用即可。
.Render()

在你的网格声明的末尾添加一个分号。这将防止“无效表达式项”错误。你的整个新代码应该如下所示:
<% Html.Telerik().Grid<NationalPetVax.Models.Product>()
          .Ajax(ajax => ajax.Action("_Index", "Products"))
          .DataKeys(dataKeys => dataKeys.Add(c => c.ProductID))
          .DataBinding(dataBinding => dataBinding.Ajax().Update("Update", "Home"))

          .Name("Grid")
                 .Columns(columns =>
                 {
                     columns.Add(o => o.ProductName).Width(81);
                     columns.Add(o => o.ProductPrice).Width(200);
                     columns.Add(o => o.ProductType.ProductTypeName);
                     columns.Add(o => o.Specy.SpeciesName);
                     columns.Add(o => o.ProductIsActive);
                     columns.Template(o =>
                     {

                         %><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");

                     })
          .Sortable()
          .Scrollable()
          .Pageable()
          .Render();
    %>

5
以下代码可以解决您的问题并使代码更加整洁。
columns.Bound(o => o.ProductId).Format(
             Html.ActionLink("Edit", "Edit", new {Id = "{0}"}).ToString());

在2010年第一季度的更新中,Bound成为了新的Add


4

我想为这段代码添加一些评论。试试这个,它能工作:

columns.Add(c => c.CustomerID).Format( Html.ActionLink("编辑", "主页", new { id = "{0}"}}) ).Encoded(false).Title("编辑");


1

虽然回复晚了,但可能对其他人有帮助。在Telerik网格的Ajax模式下,您不能仅使用服务器模板列。如果您只想向网格添加一个不绑定任何内容的额外列(同时仍保持Ajax模式),请尝试类似以下的方法

columns.Template(o=>{}).ClientTemplate(
    Html.ActionLink("<Link text here>", "<action name>", "<controller name>", 
        new { id = "<#= ID #>" }, new { @class = "Edit" }).ToString()
).Title("Edit Column")

这会正常渲染,任何你想要的链接数据也会被处理好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接