2010-02-16 15 views
9

Estoy migrando mi aplicación de asp.net mvc a mvc versión 2 y estoy teniendo el siguiente problema.ASP.NET MVC 2 actionlink rompiendo después de la migración de MVC versión 1

que tienen enlaces de paginación < < <> >> que incluir en cada página. De este modo:

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

Existen en un ascx de la siguiente manera.

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

Cuando intento acceder a la página me sale el error:

CS0173: Tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre 'System.Web.Mvc.MvcHtmlString' y ' string '

El error está marcado arriba y parece estar en el enlace de acción. Incluir el nombre del controlador no ayuda. ¿Algunas ideas?

Respuesta

13

Html.ActionLink() ahora devuelve un MvcHtmlString, en lugar de solo una cadena. Esta nueva clase se deriva de IHtmlString. No se puede convertir automáticamente de cadena a IHtmlString.

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

tiene que cambiar a

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

Esta nueva clase se utilizará en ASP.NET 4 para hacer uso "inteligente" del nuevo operador de escape 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

Muchas gracias. Tenga en cuenta que debería ser MvcHtmlString.Create ("<<") aunque no puede crear una nueva MvcHtmlString usando el constructor. – Alistair

+1

Solo una nota que también puede agregar '.ToString()' al 'Html.ActionLink (...)' para obtener una cadena adecuada. En ese caso, no necesitaría crear un nuevo MvcHtmlString para el "<<" en el lado falso de ese ternario ... – Funka