ASP.NET MVC 2 actionlink разрывается после перехода с MVC версии 1 - PullRequest
9 голосов
/ 17 февраля 2010

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

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

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

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

1 Ответ

13 голосов
/ 17 февраля 2010

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) %> -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...