2010-02-16 61 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