Разрыв ссылки действия ASP.NET MVC 2 после миграции с MVC версии 1

Я переношу свое приложение с asp.net mvc на mvc версии 2, и у меня возникла следующая проблема.

У меня есть пейджинговые ссылки ‹‹ ‹ > >>, которые я включаю на каждую страницу. Вот так:

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

Ошибка отмечена выше и, по-видимому, связана со ссылкой на действие. Включение имени контроллера не помогает. Любые идеи?


person Alistair    schedule 16.02.2010    source источник


Ответы (1)


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 для «умного» использования нового оператора 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) %> -->
person Jarrett Meyer    schedule 16.02.2010
comment
Большое Вам спасибо. Обратите внимание, что это должен быть MvcHtmlString.Create(‹‹), поскольку вы не можете создать новую MvcHtmlString с помощью конструктора. - person Alistair; 17.02.2010
comment
Просто обратите внимание, что вы также можете добавить .ToString() к Html.ActionLink(...), чтобы получить правильную строку. В этом случае вам не нужно будет создавать новую MvcHtmlString для ‹‹ на ложной стороне этого тернара... - person Funka; 22.05.2010