有没有办法将Tag Helpers集成到MVC CodeTemplates中?

时间:2015-08-17 18:12:06

标签: c# asp.net-mvc razor model-view-controller

我刚刚开始使用ASP.NET MVC 5(C#),并且对HTML帮助程序感到有些困惑。

@using (Html.BeginForm("Add", "Song"))

我理解这有什么用,但是对于那些不了解Razor / C#的人来说,如果没有正确曝光,这将是一个陡峭的学习曲线。我也知道可用的标签助手,就像我目前所看到的那样。

<form asp-action="Add" asp-controller="Song">

对我而言,这似乎更合适,因为这意味着不理解Razor语法的人将能够更容易地阅读和理解正在发生的事情,因为它与&#34; normal&#34;更加相似。 HTML。话虽这么说,改变每一页使用Tag Helpers似乎是单调且不必要的。

我最近发现了CodeTemplate文件,并将它们包含在我的项目中,目的是在模板文件中添加Tag Helpers。但是,我很快意识到大多数Tag Helpers都需要一个特定的Controller或其他任何东西来填充元素属性。显然,这个Controller /任何将动态地改变,具体取决于哪个Controller /提示创建View的任何内容。如果我硬编码asp-controller="Song"然后我尝试从这个CodeTemplate创建一个专辑视图,我显然会使用错误的控制器。

有没有办法访问称为View的Controller,Link等的动态属性?换句话说,有没有在CodeTemplate中执行此操作,其中This是Controller /从修改后的CodeTemplate构造View的任何内容?

<form asp-action="This.Action" asp-controller="This.Controller">

实施例

如果我在所有视图中的CodeTemplate中都有<form asp-action="This.Action" asp-controller="This.Controller">,然后从不同的控制器创建了视图:

歌曲控制器

  • 创建视图 - <form asp-action="Add" asp-controller="Song">
  • 更新视图 - <form asp-action="Edit" asp-controller="Song">

专辑控制器

  • 创建视图 - <form asp-action="Add" asp-controller="Album">
  • 更新视图 - <form asp-action="Edit" asp-controller="Album">

这有可能吗?还是我完全脱了?让我知道!谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用solution I found here

<form asp-controller="@this.ViewContext.RouteData.Values["controller"].ToString())" 
  asp-action="@this.ViewContext.RouteData.Values["action"].ToString())">