【问题标题】:MVCContrib Grid Condtional Column Showing Different Types显示不同类型的 MVCContrib 网格条件列
【发布时间】:2012-02-20 03:25:15
【问题描述】:

我知道如何使用 Html.ActionLink 在 MVCContrib Grid 列上显示链接,但我想做的是基于字段的值,如果该字段的值 = false,则显示文本,如果为真,然后显示一个链接。

它不会让我做这样的事情:

column.For(x => x.HasValue == false ? 
                x.Name : Html.ActionLink(x.Name, "MyMethod", "MyController")

"无法将 lambda 表达式转换为类型 'string' 因为它不是委托类型"

它允许我在两种情况下都使用 Html.Raw,但是当我运行应用程序时,我会收到相同的错误消息

提前致谢。

【问题讨论】:

  • x.Name 是什么类型,上面的代码缺少右括号,这是问题的一部分吗?
  • @PhilipFourie x.Name 是一个字符串。缺少括号不是问题的一部分,我只是忘了粘贴它。我得到了它的工作,使用这样的东西:
  • @PhilipFourie column.For(x => x.HasAttachment ? string.Format(@"{1}", ResolveUrl( "~/MyApp/MyController/MyMethod/")) : x.Name)

标签: asp.net-mvc asp.net-mvc-2 mvccontrib-grid


【解决方案1】:

在 ASP.NET MVC 2 中,您可以使用 Action Syntax:

column.For("Name")
      .Named("")
      .Action(item => { %>
          <td style="font-weight:bold">
              <% if (item.HasValue) { %>
                  <%= Html.Encode(item.Name) %>
              <% } else { %>
                  <%= Html.ActionLink(item.Name, "MyMethod", "MyController") %>
              <% } %>
          </td>
      <% });

作为替代方案,您也可以使用部分:

column
    .For("Name")
    .Named("")
    .Partial("MyPartial"); 

MyPartial.ascx 内部执行测试。

在 ASP.NET MVC 3 中,这已被弃用,取而代之的是自定义列 (columns.Custom(...))。

【讨论】:

  • 不知何故系统不允许我使用colum.For("Name"),我必须使用column.For(item => item.HasValue)。另外,在使用与您的示例类似的内容时,我不断收到错误消息“CS1525:无效的表达式术语')'”。为了使它起作用,我最终使用了这样的东西: column.For(x => x.HasAttachment ? string.Format(@"{1}" , ResolveUrl("~/MyApp/MyController/MyMethod/" = x.Name)) : x.Name)
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多