2011-02-17 61 views
0

我是ASP.NET MVC的新手,無法弄清楚這一點。通過Professional ASP.NET MVC 2中的Nerdinner示例,我複製了PaginatedList助手類並決定對其進行改進,以便前後鏈接可以由類中的方法生成,而不是在每個視圖頁面中寫出。我複製這從視圖,它是在,Index.aspx的:ASP.NET MVC 2 RouteLink方法

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

,並用它來創建助手\ 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'的定義,也沒有可以找到接受'System.Web.Mvc.HtmlHelper'類型的第一個參數的擴展方法'RouteLink' (你是否缺少使用指令或程序集引用?)「。

根據有關LinkExtensions.RouteLink方法的Microsoft文檔,「在Visual Basic和C#中,可以將此方法作爲任何類型爲HtmlHelper的對象的實例方法調用」。他們說謊嗎?

幫助!

回答

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中的HtmlHelpers的是靜態方法,也他們返回Asp.net MVC的MvcHtmlString 2.這將是類HtmlHelper的擴展方法。在將這些引用添加到包含此擴展方法的代碼文件後,您應該在其中看到RouteLink方法。

+0

我很高興我能對你有所幫助丹。我會誠實地說,我從來沒有真正把我的模型負責生成html,看起來你可能會這樣做。我一直認爲模型只包含視圖所需的數據。無論哪種方式,它的工作原理都是關於個人喜好的。祝你有個好的一天。 – JustinMichaels 2011-02-17 18:46:41

0

@DeathBedMotorcade

這幫助,但我不得不改變一些事情。

該方法不能是靜態的,因爲它需要訪問對象的屬性(同一類的一部分,PaginatedList),特別是HasPreviousPage方法和PageIndex變量。然後它給出了錯誤「擴展方法必須是靜態的」。刪除「這個」關鍵詞固定了。所以,我有:

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語句,但此時不會。

謝謝。