从MVC版本1迁移后,ASP.NET MVC 2 actionlink中断

Ali*_*air 9 asp.net-mvc asp.net-mvc-2

我正在将我的应用程序从asp.net mvc迁移到mvc版本2,并且遇到以下问题.

我有每个页面中包含的分页链接<< <> >>.像这样:

        <% Html.RenderPartial("PagingControl", Model); %>
Run Code Online (Sandbox Code Playgroud)

它们存在于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>
Run Code Online (Sandbox Code Playgroud)

当我尝试访问该页面时,我收到错误:

CS0173:无法确定条件表达式的类型,因为'System.Web.Mvc.MvcHtmlString'和'string'之间没有隐式转换

错误标记在上方,似乎与操作链接有关.包括控制器名称没有帮助.有任何想法吗?

Jar*_*yer 13

Html.ActionLink()现在返回一个MvcHtmlString,而不仅仅是一个字符串.这个新类派生自IHtmlString.您无法自动从字符串转换为IHtmlString.

Model.HasPreviousPage ? Html.ActionLink("<<", "Index", Model.buildParams(1)) : "<<"
Run Code Online (Sandbox Code Playgroud)

需要改变

Model.HasPreviousPage ? Html.ActionLink("<<", "Index", Model.buildParams(1)) : MvcHtmlString.Create("<<")
Run Code Online (Sandbox Code Playgroud)

这个新类将在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) %> -->
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你.请注意,它应该是MvcHtmlString.Create("<<"),因为您无法使用构造函数创建新的MvcHtmlString. (2认同)