【问题标题】:ASP.NET MVC 2 actionlink breaking after migration from MVC version 1从 MVC 版本 1 迁移后 ASP.NET MVC 2 操作链接中断
【发布时间】:2010-02-16 23:08:59
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2


    【解决方案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 中用于“智能”使用新的 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) %> -->
    

    【讨论】:

    • 非常感谢。请注意,它应该是 MvcHtmlString.Create("
    • 请注意,您还可以将.ToString() 附加到Html.ActionLink(...) 以获得正确的字符串。在这种情况下,您不需要为该三元的假侧的“
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2011-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多