Asp.net mvc 2 ASP.NET MVC 2 RouteLink方法

Asp.net mvc 2 ASP.NET MVC 2 RouteLink方法,asp.net-mvc-2,Asp.net Mvc 2,我是ASP.NET MVC新手,无法理解这一点。通过使用Professional ASP.NET MVC 2中的示例,我复制了PaginatedList helper类,并决定对其进行改进,以便通过类内的方法生成前向和后向链接,而不是在每个视图页面中写出它们。我从它所在的视图Index.aspx中复制了这个: if (Model.HasPreviousPage) { Response.Write(Html.RouteLink("<<<", "Users"

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

if (Model.HasPreviousPage)
    {
        Response.Write(Html.RouteLink("<<<", "Users", new { page=(Model.PageIndex-1) }));
    }
现在我得到“'System.Web.Mvc.HtmlHelper'不包含'RouteLink'的定义,并且找不到接受'System.Web.Mvc.HtmlHelper'类型的第一个参数的扩展方法'RouteLink'(是否缺少using指令或程序集引用?)

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


救命啊

如果你想让它成为HtmlHelper,那就改变一下

public string NavLinks(HtmlHelper Html)
{
    if (HasPreviousPage)
    {
        return Html.RouteLink("<<<", "Users", new { page=(PageIndex-1) });
    }
}
公共字符串导航链接(HtmlHelper Html)
{
如果(上一页)
{
返回Html.RouteLink(“@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;
} 
这是可行的,尽管我不完全理解为什么以前没有

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


谢谢。

我很高兴能为你提供一些帮助,丹。老实说,我从来没有像你看起来那样让我的模型负责生成html。我一直觉得模型唯一的责任就是包含视图所需的数据。无论哪种方式都有效,最终都是个人喜好。祝你好运我不确定它应该放在哪里,因为我是这个MVC的新手,对它的了解不足以做出明智的决定。它在一个名为PaginatedList的类中,在一个名为Helpers的文件夹中,所以我不确定它是否算作一个模型、一个视图、一个控制器或其他什么。我所要做的就是避免在底层重复相同的代码我发布的实现是创建一个自定义的HtmlHelper,它将像Mvc中的默认帮助程序一样被调用。原因是它是静态的(这个HtmlHelper html)参数用于通知框架这是HtmlHelper类的扩展方法。然后将bool hasPreviousPage和int PageIndex传递给此方法,因为这是生成寻呼机链接所需的。
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) });
    }
}
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))