2010-02-16 3 views
9

Je migre mon application de asp.net mvc vers mvc version 2 et j'ai le problème suivant.ActionScript ASP.NET MVC 2 rupture après la migration de MVC version 1

J'ai des liens de radiomessagerie < < <> >> que j'inclus dans chaque page. Comme si:

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

Ils existent dans un fichier ascx comme suit.

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

Lorsque je tente d'accéder à la page que je reçois l'erreur:

CS0173: Type d'expression conditionnelle ne peut être déterminée parce qu'il n'y a pas de conversion implicite entre « System.Web.Mvc.MvcHtmlString » et ' chaîne '

L'erreur est marquée ci-dessus et semble être avec le lien d'action. Y compris le nom du contrôleur n'aide pas. Des idées?

Répondre

13

Html.ActionLink() renvoie maintenant un MvcHtmlString, au lieu d'une simple chaîne. Cette nouvelle classe dérive de IHtmlString. Vous ne pouvez pas convertir automatiquement une chaîne en un IHtmlString.

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

doit changer pour

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

Cette nouvelle classe sera utilisée dans ASP.NET 4 pour utiliser « intelligent » du nouvel opérateur d'échappement 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

Merci beaucoup. Notez qu'il devrait être MvcHtmlString.Create ("<<") bien que vous ne puissiez pas créer un nouveau MvcHtmlString en utilisant le constructeur. – Alistair

+1

Juste une note que vous pouvez également ajouter '.ToString()' à 'Html.ActionLink (...)' afin d'obtenir une chaîne correcte. Dans ce cas, vous n'avez pas besoin de créer un nouveau MvcHtmlString pour le "<<" du côté faux de ce ternaire ... – Funka