2010-02-16 63 views
9

我正在将我的应用程序从asp.net mvc迁移到mvc版本2,并遇到以下问题。ASP.NET MVC 2动作链接从MVC版本1迁移后破坏

我有分页链接< < <> >>,我包括在每个页面中。像这样:

 <% Html.RenderPartial("PagingControl", Model); %> 

它们存在于ascx文件中,如下所示。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<BankingDB.Controllers.Utility.IPagedSortedObject>" %> 
    <div class="paging"> 
     <div class="previous-paging"> 
<!- error!! -><%= Model.HasPreviousPage ? Html.ActionLink("<<", "Index", Model.buildParams(1)) : "<<"%> 
      <%= Model.HasPreviousPage ? Html.ActionLink("<", "Index", Model.buildParams(Model.PreviousPageIndex)) : "<"%> 
     </div> 
     <div class="paging-details"> 
      Showing records <%= Model.BaseRecordIndex %> to <%= Model.MaxRecordIndex %> of <%= Model.TotalRecordCount %> 
     </div> 
     <div class="next-paging"> 
      <%= Model.HasNextPage ? Html.ActionLink(">", "Index", Model.buildParams(Model.NextPageIndex)) : ">"%> 
      <%= Model.HasNextPage ? Html.ActionLink(">>", "Index", Model.buildParams(Model.PageCount)) : ">>"%> 
     </div>   
    </div> 

当我尝试访问的页面出现错误:

CS0173:无法确定条件表达式的类型,因为有“System.Web.Mvc.MvcHtmlString”之间的隐式转换“字符串'

错误标记在上面,似乎与操作链接。包括控制器名称并没有帮助。有任何想法吗?

回答

13

Html.ActionLink()现在返回一个MvcHtmlString,而不是一个字符串。这个新类从IHtmlString派生。您不能自动从字符串转换为IHtmlString。

Model.HasPreviousPage ? Html.ActionLink("<<", "Index", Model.buildParams(1)) : "<<" 

需要改变,以

Model.HasPreviousPage ? Html.ActionLink("<<", "Index", Model.buildParams(1)) : MvcHtmlString.Create("<<") 

这个新的类将在ASP.NET 4被用来制造“智能”使用新的ASP逃生运营商。

<%: Html.ActionLink("My Link", "Action", "Controller") %> <!-- knows to not HTML-escape, because ActionLink is an IHtmlString --> 
<%: Model.FirstName %> <!-- short hand notation for <%= Html.Escape(Model.FirstName) %> --> 
+2

非常感谢。请注意,它应该是MvcHtmlString.Create(“<<”),尽管您无法使用构造函数创建新的MvcHtmlString。 – Alistair 2010-02-16 23:22:47

+1

只需注意,您还可以将'.ToString()'附加到'Html.ActionLink(...)'以获取正确的字符串。在这种情况下,您不需要为该三元组的虚假面上的“<<”创建新的MvcHtmlString ... – Funka 2010-05-21 22:43:06