2010-02-16 26 views
9

Tôi đang di chuyển ứng dụng của mình từ asp.net mvc sang mvc phiên bản 2 và đang gặp vấn đề sau.Phá vỡ liên kết hành động ASP.NET MVC 2 sau khi di chuyển từ phiên bản MVC 1

Tôi có liên kết trang < < <> >> mà tôi đưa vào mỗi trang. Giống như vậy:

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

Chúng tồn tại trong tệp ascx như sau.

<%@ 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> 

Khi tôi cố gắng truy cập vào trang tôi nhận được lỗi:

CS0173: Loại biểu thức điều kiện không xác định được vì không có chuyển đổi ngầm giữa 'System.Web.Mvc.MvcHtmlString' và ' string '

Lỗi được đánh dấu ở trên và dường như có liên kết hành động. Bao gồm tên bộ điều khiển không giúp ích gì. Bất kỳ ý tưởng?

Trả lời

13

Html.ActionLink() hiện trả về MvcHtmlString, thay vì chỉ một chuỗi. Lớp mới này bắt nguồn từ IHtmlString. Bạn không thể tự động truyền từ chuỗi sang IHtmlString.

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

cần phải thay đổi để

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

lớp mới này sẽ được sử dụng trong ASP.NET 4 để tận dụng "thông minh" của người điều khiển thoát ASP mới.

<%: 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

Cảm ơn bạn rất nhiều. Lưu ý rằng nó phải là MvcHtmlString.Create ("<<") mặc dù vì bạn không thể tạo một MvcHtmlString mới bằng cách sử dụng hàm tạo. – Alistair

+1

Chỉ cần lưu ý rằng bạn cũng có thể nối '.ToString()' vào 'Html.ActionLink (...)' để nhận chuỗi thích hợp. Trong trường hợp đó, bạn sẽ không cần phải tạo một MvcHtmlString mới cho "<<" ở bên giả của ternary đó ... – Funka

Các vấn đề liên quan