4

我有一个@heper pagination功能。那是有两个 View helperViewBagUrl. 这个分页将被很多页面使用,所以我将代码从Views一个文件夹转移到另一个文件App_Code夹。里面的代码App_Code/Helper.cshtml

@helper buildLinks(int start, int end, string innerContent)
{
     for (int i = start; i <= end; i++)
     {   
         <a class="@(i == ViewBag.CurrentPage ? "current" : "")" href="@Url.Action("index", "country", new { page = i })">@(innerContent ?? i.ToString())</a>
     }   
}

但是现在当我运行应用程序时。它抛出错误

error CS0103:The name 'ViewBag' does not exist in the current context
error CS0103:The name 'Url' does not exist in the current context

我是否需要导入任何命名空间或问题出在哪里?

我想做的方式是完美的吗?

4

3 回答 3

13

好吧,实际上您可以从 App_Code 文件夹中的帮助程序访问 ViewBag,如​​下所示:

@helper buildLinks()
{
    var p = (System.Web.Mvc.WebViewPage)PageContext.Page;

    var vb = p.ViewBag;

    /* vb is your ViewBag */
}
于 2012-08-15T09:41:32.793 回答
4

如果您将助手移至 App_Code,则必须将ViewBag, UrlHelper,传递HtmlHelper给视图中的函数。

前任。

App_code 中的 html 辅助函数

@helper SomeFunc(System.Web.Mvc.HtmlHelper Html)
{
    ...
}

在你看来,

@SomeFunc("..", Html) // passing the html helper
于 2012-07-18T04:59:43.677 回答
4

正如马克所说,您应该将 UrlHelper 作为参数传递给您的助手:

@helper buildLinks(int start, int end, int currentPage, string innerContent, System.Web.Mvc.UrlHelper url)
{
     for (int i = start; i <= end; i++)
     {   
         <a class="@(i == currentPage ? "current" : "")" href="@url.Action("index", "country", new { page = i })">@(innerContent ?? i.ToString())</a>
     }   
}

然后从一个视图中这样称呼它:

@Helper.buildLinks(1, 10, ViewBag.CurrentPage, "some text", Url)
于 2012-07-18T06:12:33.137 回答