2012-02-20 33 views
2

我知道如何使用Html.ActionLink在MVCContrib Grid列上显示链接,但我想要做的是基于字段的值,如果字段具有值= false然后显示文本,如果它是真的,然后显示一个链接。MVCContrib Grid Condtional列显示不同类型

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

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

“不能转换lambda表达式到类型‘串’becasue它不是一个委托类型”

它让我使用HTML。原始的两个条件,但是当我运行应用程序,我得到相同的错误信息

在此先感谢。

+0

什么类型是'x.Name'和上面的代码有一个右括号缺失,是问题的一部分? – 2012-02-20 05:19:12

+0

@ PhilipFourie x.Name是一个字符串。缺少的括号不是问题的一部分,我只是忘了粘贴它。我得到它的工作,使用这样的事情: – DaveEpp 2012-02-21 19:37:07

+0

@PhilipFourie column.For(x => x.HasAttachment?string.Format(@“{1}”,ResolveUrl(“〜/ MyApp/MyController/MyMethod /”)):x .Name) – DaveEpp 2012-02-21 19:37:31

回答

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(...))。

+0

不知何故,系统不会让我使用colum.For(“Name”),我不得不使用column.For(item => item.HasValue)。另外,当使用类似于您的示例的东西时,我总是收到错误消息“CS1525:无效的表达式项”)。 (x => x.HasAttachment?string.Format(@“{1}”,ResolveUrl(“〜/ MyApp/MyController/MyMethod /”= x.Name))为了使其工作,我最终使用了这样的:column.For ):x.Name) – DaveEpp 2012-02-21 19:32:31