【发布时间】:2015-08-17 18:12:06
【问题描述】:
我刚刚开始使用 ASP.NET MVC 5 (C#),对 HTML 帮助程序有点困惑。
@using (Html.BeginForm("Add", "Song"))
我知道这会有什么帮助,但我觉得对于不了解 Razor/C# 的人来说,如果不正确地了解这将是一个陡峭的学习曲线。我也知道可用的标签助手,并且喜欢我目前看到的。
<form asp-action="Add" asp-controller="Song">
对我来说,这似乎更合适,因为这意味着不了解 Razor 语法的人将能够更轻松地阅读和理解正在发生的事情,因为它与“普通”HTML 更相似。话虽如此,将每个页面更改为使用 Tag Helpers 似乎是单调且不必要的。
我最近找到了 CodeTemplate 文件,并将它们包含在我的项目中,目的是在模板文件中添加 Tag Helpers。然而,我很快意识到大多数标签助手需要一个特定的控制器或其他任何东西来填写元素属性。显然,这个 Controller/whatever 将根据促使创建 View 的 Controller/whatever 动态变化。如果我硬编码asp-controller="Song" 然后我尝试从这个 CodeTemplate 创建一个相册视图,我显然会使用错误的控制器。
有没有办法访问任何控制器、链接等称为视图的动态属性?换句话说,是否有某种方式在 CodeTemplate 中执行此操作,其中 This 是控制器/从修改后的 CodeTemplate 构造视图的任何东西?
<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">
这可能吗?还是我完全关闭了?让我知道!谢谢!
【问题讨论】:
-
这完全是题外话,但我只是想谈谈为什么 razor 有用......假设你有你的模型,在那个模型中你有类似“public string FirstName { get; set;}" 然后你想通过让用户在文本框中输入一些东西来给出这个值。使用 razor 语法就像这样做一样简单:@Html.TextBoxFor(model=>model.FirstName) 这给了你你的文本框,它会给你模型中的 FirstName 属性赋值。学习曲线真的不大,如果你找到一份做 MVC 的工作,他们很可能会使用 razor。
-
完全同意。这可能就是我使用 Razor 的方式。但我认为对于某些事情,使用 Tag Helpers 会更好。但也许混合和匹配样式是个坏主意?
-
我敢肯定,更“资深”的人可以纠正我或在这里插话,但就我个人而言,我从未见过在我使用过的不同代码库中这样做过。 Razor 似乎就在它现在的位置。
标签: c# asp.net-mvc razor model-view-controller