Asp.net mvc 5 如何在MVC5中创建声明性HTML帮助程序

Asp.net mvc 5 如何在MVC5中创建声明性HTML帮助程序,asp.net-mvc-5,Asp.net Mvc 5,我的设想: 我终于开始着手创建自己的博客了,同时我也在尽可能多地学习MVC。我试图在我的“PostView.cshtml”文件中将我的标记显示为自定义声明性帮助程序,但我的问题是它不在当前上下文中,我不知道如何做到这一点 关于这一点,我看了以下两个问题: 是针对MVC的早期版本(我决定尝试使用MVC3方式,我手动添加了App_Code文件夹,并遵循中的步骤。 它成功了,我需要重新启动VisualStudio才能让我的Intellisense工作(这延长了找到解决方案的时间) 我删除了文件夹“~/

我的设想:

我终于开始着手创建自己的博客了,同时我也在尽可能多地学习MVC。我试图在我的“
PostView.cshtml
”文件中将我的标记显示为自定义声明性帮助程序,但我的问题是它不在当前上下文中,我不知道如何做到这一点

关于这一点,我看了以下两个问题:


是针对MVC的早期版本(我决定尝试使用MVC3方式,我手动添加了App_Code文件夹,并遵循中的步骤。 它成功了,我需要重新启动VisualStudio才能让我的Intellisense工作(这延长了找到解决方案的时间)

我删除了文件夹“~/Views/Shared/”

我在App_code文件夹中添加了一个文件
MyHelpers.cshtml
,在我添加我的helper方法的文件中:

@helper Tags(System.Web.Mvc.HtmlHelper htmlHelper,
    ICollection<MyNamespace.Objects.Tag> tags)
{
    foreach (var tag in tags)
    {
        <div class="tags-div">
            @MyNamespace.Extensions.ActionLinkExtensions.TagLink(htmlHelper, tag)
        </div>
    }
}

Viola的工作与预期的一样…希望这能帮助其他最终陷入这种情况的人…

我认为更好、更简单的方法是为您的标签集合定义一个显示模板,该模板将放置在
~视图/共享/显示模板

@model ICollection<MyNamespace.Objects.Tag>

foreach (var tag in Model)
{
    <div class="tags-div">
        @MyNamespace.Extensions.ActionLinkExtensions.TagLink(htmlHelper, tag)
    </div>
}
@model MyNamespace.Objects.Post
<!--extra html removed for simplicity-->
<div>
    <span>Tags:</span>@Tags(Html, Model.Tags) // '@Tags' doesn't exist in current context
</div>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization"/>
    <add namespace="System.Web.Routing" />
    <add namespace="MyNamespace" />
    <add namespace="MyNamespace.Extensions" />
  </namespaces>
</pages>
@helper Tags(System.Web.Mvc.HtmlHelper htmlHelper,
    ICollection<MyNamespace.Objects.Tag> tags)
{
    foreach (var tag in tags)
    {
        <div class="tags-div">
            @MyNamespace.Extensions.ActionLinkExtensions.TagLink(htmlHelper, tag)
        </div>
    }
}
@MyHelpers.Tags(Html, Model.Tags)
@model ICollection<MyNamespace.Objects.Tag>

foreach (var tag in Model)
{
    <div class="tags-div">
        @MyNamespace.Extensions.ActionLinkExtensions.TagLink(htmlHelper, tag)
    </div>
}
@Html.DisplayFor(model => model.Tags)