代码之家  ›  专栏  ›  技术社区  ›  Alistair

从MVC版本1迁移后ASP.NET MVC 2操作链接中断

  •  9
  • Alistair  · 技术社区  · 14 年前

    我正在将我的应用程序从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”之间没有隐式转换。

    错误标记在上面,并且似乎与操作链接有关。包括控制器名称没有帮助。有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  13
  •   AlexCuse    14 年前

    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 Escape运算符。

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