ASP.NET MVC 2 RouteLink方法

时间:2011-02-17 11:40:03

标签: asp.net-mvc-2

我是ASP.NET MVC的新手,无法解决这个问题。通过Professional ASP.NET MVC 2中的Nerdinner示例,我复制了PaginatedList助手类,并决定对其进行改进,以便前向和后向链接可以由类中的方法生成,而不是在每个视图页面中写出。我从它所在的视图中复制了这个,Index.aspx:

if (Model.HasPreviousPage)
    {
        Response.Write(Html.RouteLink("<<<", "Users", new { page=(Model.PageIndex-1) }));
    }

并使用它在Helpers \ PaginatedList.cs中创建此方法:

public string NavLinks()
{
    if (HasPreviousPage)
    {
        return Html.RouteLink("<<<", "Users", new { page=(PageIndex-1) });
    }
}

(HasPreviousPage是PaginatedList中的一个简单方法。)

直接它抱怨“当前上下文中不存在名称'Html',所以我修改它以获取参数:

public string NavLinks(HtmlHelper Html)

现在我得到''System.Web.Mvc.HtmlHelper'不包含'RouteLink'的定义,并且没有扩展方法'RouteLink'接受类型'System.Web.Mvc.HtmlHelper'的第一个参数' (您是否缺少using指令或程序集引用?)“。

根据关于LinkExtensions.RouteLink方法的Microsoft文档,“在Visual Basic和C#中,您可以将此方法作为HtmlHelper类型的任何对象上的实例方法”。他们撒谎吗?

帮助!

2 个答案:

答案 0 :(得分:1)

如果您尝试将其设为HtmlHelper,只需更改

即可
public string NavLinks(HtmlHelper Html)
{
    if (HasPreviousPage)
    {
        return Html.RouteLink("<<<", "Users", new { page=(PageIndex-1) });
    }
}

using System.Web.Mvc;
using System.Web.Mvc.Html;

public static MvcHtmlString NavLinks(this HtmlHelper html, hasPreviousPage)
{
    if (hasPreviousPage)
    {
        return html.RouteLink("<<<", "Users", new { page=(PageIndex-1) });
    }
}

Mvc中包含的所有HtmlHelper都是静态方法,并且它们在Asp.net MVC 2中返回一个MvcHtmlString。这将是HtmlHelper类的扩展方法。将这些引用添加到包含此扩展方法的代码文件后,您应该在其中看到RouteLink方法。

答案 1 :(得分:0)

@DeathBedMotorcade

这有帮助,但我不得不改变一些事情。

该方法不能是静态的,因为它需要访问对象的属性(同一类的一部分,PaginatedList),特别是HasPreviousPage方法和PageIndex变量。然后它给出了错误“扩展方法必须是静态的”。删除“this”关键字修复了该问题。所以我有:

public MvcHtmlString NavLinks(HtmlHelper html)
{
    if (HasPreviousPage)
    {
        return html.RouteLink("<<<", "Users", new { page=(PageIndex-1) });
    }
    if (HasNextPage)
    {
        return html.RouteLink(">>>", "Users", new { page=(PageIndex+1) });
    }
    return null;
} 

在视图中:

Response.Write(Model.NavLinks(Html))

虽然我没有完全理解为什么之前没有这样做的所有原因,但这都有效。

“使用System.Web.Mvc.Html”是关键,虽然我以为我在某个时候尝试过这个;可能在实现项目“Html”(一个隐式传递给视图的HtmlHelper对象?)之前需要传入.VS通常会提示缺少Using语句,但这次没有。

感谢。