2015-05-30 23 views
0

我的情況:如何在MVC創建聲明HTML幫助5

我終於讓周圍創造我自己的博客,而我努力學習儘可能多地與問候到MVC,而這樣做。我試圖在我的「PostView.cshtml」文件中將自己的代碼顯示爲自定義聲明助手,但我的問題是它不在當前上下文中,我不知道如何實現。

我有一個看看以下兩個問題上SO:

this one是以前版本的MVC(< = 4)和

this one被誰問的問題和ISN的傢伙回答不是很有說服力。

我嘗試了上述建議但沒有成功,希望有人能幫助我。這裏是我的代碼:

Tags.cshtml(在〜/查看/幫手/):

@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> 
    } 
} 

ActionLinkExtensions.cs(在〜/擴展/ ActionLinkExtensions /)

namespace MyNamespace.Extensions 
{ 
    public static class ActionLinkExtensions 
    { 
     public static MvcHtmlString TagLink(this HtmlHelper helper, Tag tag) 
     { 
      return helper.ActionLink("", ""); //logic removed for simplicity 
     } 
    } 
} 

PostView.cshtml(in〜/ Views/Shared /)//我想用我的自定義幫手:

@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> 

我也嘗試添加命名空間爲 '〜/查看/ web.config中':

<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> 

我的 「全名」 我的 「Tag.cs​​」 類MyNamespace.Objects.Tag和 「郵報」 的.cs」是MyNamespace.Objects.Post

任何解釋和建議的答案也將不勝感激,非常感謝你提前。

回答

1

我決定嘗試使用MVC3的方式,我手動添加了App_Code文件夾,並遵循this great article的步驟。 它的工作,我需要重新啓動Visual Studio爲我的智能感知工作(這延長了我的解決方案)。

我刪除的文件夾'〜/查看/共享/'

我添加的文件MyHelpers.cshtml到App_Code文件夾,裏面的文件我將我的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> 
    } 
} 

並號召它在我的PostView.cshtml像這樣:

@MyHelpers.Tags(Html, Model.Tags) 

和中提琴按預期工作......希望這可以幫助小號其他誰最終在這種情況下...

0

我相信更好,更簡單的方法是定義一個顯示模板,你的標籤集合,將被放置在~Views/Shared/DisplayTemplates

@model ICollection<MyNamespace.Objects.Tag> 

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

在你PostView.cshtml你會再這樣寫:

@Html.DisplayFor(model => model.Tags)