2010-02-16 5 views
9

Я переношу свое приложение из asp.net mvc в mvc version 2, и у меня есть следующая проблема.ASP.NET MVC 2 actionlink после миграции из 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» и ' string '

Ошибка указанно выше и отображается как связанная с этим ссылка. Включение имени контроллера не помогает. Есть идеи?

ответ

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

+1

Просто обратите внимание, что вы также можете добавить '.ToString()' в 'Html.ActionLink (...)', чтобы получить нужную строку. В этом случае вам не нужно создавать новую MvcHtmlString для «<<» на ложной стороне этого тройного ... – Funka

Смежные вопросы