2013-02-11 34 views
1

previous post我问了一个关于帮助者入门的问题。我成功了,但是当我尝试使用该技术时1.要编写基于Html.RenderAction的另一个帮助程序,以及2.要传入我自己的自定义帮助程序,一旦将它们导出到App_Code,就会收到错误。MVC4 URLHelper正在工作,但HTMLHelper没有。我在做什么错

再次强调,它们以内联方式工作,但不在导出到App_Code时工作。

这里是原代码:

我的代码很多地方都只有以下几点:

<section class="Box"> 
     @{ Html.RenderAction("PageOne"); } 
    </section> 

其他许多地方都有这样的:

@if (@Model.PageTwo) 
{ 
    <section class="Box"> 
     @{ Html.RenderAction("PageTwo"); } 
    </section> 
} 

所以我的第一个步骤是将以下内容提取到内联助手中,可用于上述所有代码块中:

@helper Item(HtmlHelper html, string action, string htmlClass) 
{ 
    <section class="@htmlClass"> 
     @{ html.RenderAction(action); } 
    </section> 
} 

助手上面让我来代替,看起来像在第一代码段上面这行的所有代码块:

@Item(Html, "PageOne", "Box") 

然后我接着写第二个辅助看起来像这样:

@helper Item(HtmlHelper html, string action, string htmlClass, bool test) 
{ 
    if (test) 
    { 
     @Item(html, action, htmlClass) 
    } 
} 

此助手可以让我代替所有的代码块看起来像第二个代码段上面这条线:

@Item(Html, "PageTwo", "Box", @Model.ShowThisTorF) 

我的主要问题再次是,这工作内联,所以为什么不当我把它删除到App_Code。

一旦我将它移动到App_Code文件我得到以下错误: 第一个问题是关于增加一个使用引用(因为的HtmlHelper不明确),而我添加以下代码行:

@using HtmlHelper=System.Web.Mvc.HtmlHelper 

这删除第一个错误,但后来我得到另一个错误:

System.Web.Mvc.HtmlHelper does not contain a definition for 'RenderAction' and no extension method 'RenderAction' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

我也尝试过其他的参考,但没有结果:

@using HtmlHelper=System.Web.WebPages.Html.HtmlHelper 

我遇到的另一个问题是,我不认为第二个块会工作,一旦我得到第一个工作。即使它内联运行良好。

另外,我知道它很明显,但如果我不在这里说,有人会在他们的答案中提出。

@Helpers.Item(Html, "PageOne", "Box") 
@Helpers.Item(Html, "PageTwo", "Box", @Model.ShowThisTorF) 

感谢任何与此帮助:当我把它输出到文件App_Code文件的要求,所以一行代码块看起来像我确实添加文件名前缀。

回答

3

App_Code目录中正确的HtmlHelper内部帮助程序是System.Web.Mvc.HtmlHelper

因为RenderAction是你需要添加一个using用于在声明命名空间是@using System.Web.Mvc.Html

所以这应该假设你的文件被命名为Helpers.cshtml,并在App_Code目录的扩展方法:

@using HtmlHelper=System.Web.Mvc.HtmlHelper 
@using System.Web.Mvc.Html 

@helper Item(HtmlHelper html, string action, string htmlClass) 
{ 
    <section class="@htmlClass"> 
     @{ html.RenderAction(action); } 
    </section> 
} 
@helper Item(HtmlHelper html, string action, string htmlClass, bool test) 
{ 
    if (test) 
    { 
     @Item(html, action, htmlClass) 
    } 
} 

和使用:

@Helpers.Item(Html, "PageOne", "Box") 
@Helpers.Item(Html, "PageTwo", "Box", @Model.ShowThisTorF) 
+0

感谢您的回答。我教过它可能只是微小的变化。非常感激。 – 2013-02-13 12:46:29

相关问题