2010-02-16 5 views
9

Ich migriere meine Anwendung von asp.net mvc zu mvc Version 2 und habe das folgende Problem.ASP.NET MVC 2 actionlink bricht nach der Migration von MVC Version 1

Ich habe Paging-Links < < <> >>, dass ich auf jeder Seite enthalten. Wie folgt:

Sie existieren in einer Ascx-Datei wie folgt.

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

Wenn ich versuche, die Seite, die ich den Fehler zuzugreifen:

CS0173: Art des bedingten Ausdrucks kann nicht bestimmt werden, weil es keine implizite Konvertierung zwischen ‚System.Web.Mvc.MvcHtmlString‘ und ' Zeichenfolge '

Der Fehler ist oben markiert und scheint mit dem Aktionslink zu sein. Das Einschließen des Controllernamens hilft nicht. Irgendwelche Ideen?

Antwort

13

Html.ActionLink() gibt jetzt einen MvcHtmlString statt nur einer Zeichenfolge zurück. Diese neue Klasse stammt von IHtmlString. Sie können nicht automatisch von einer Zeichenfolge in einen HTMLString konvertieren.

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

muss

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

Diese neue Klasse 4 verwendet in ASP.NET werden sich ändern "intelligente" Nutzung der neuen ASP-Escape-Operator zu machen.

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

Vielen Dank. Beachten Sie, dass es MvcHtmlString.Create ("<<") sein sollte, da Sie mit dem Konstruktor keinen neuen MvcHtmlString erstellen können. – Alistair

+1

Nur ein Hinweis, dass Sie auch '.ToString()' an den 'Html.ActionLink (...)' anhängen können, um eine richtige Zeichenfolge zu erhalten. In diesem Fall müssten Sie keinen neuen MvcHtmlString für das "<<" auf der falschen Seite dieses Ternärs erstellen ... – Funka