从MVC 1迁移到MVC 2后,ASP.NET MVC 2的ActionLink出现问题

9

我正在将我的应用程序从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个回答

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
请注意,您还可以在Html.ActionLink(...)后附加.ToString(),以获得适当的字符串。在这种情况下,您不需要为该三元运算符的false侧上的“<<”创建新的MvcHtmlString ... - Funka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接