【问题标题】:Which way do you prefer to create your forms in MVC?你更喜欢用哪种方式在 MVC 中创建表单?
【发布时间】:2010-09-07 17:20:46
【问题描述】:
您更喜欢用哪种方式在 MVC 中创建表单?
<% Html.Form() { %>
<% } %>
或者
<form action="<%= Url.Action("ManageImage", "UserAccount") %>" method="post">
</form>
我知道从 PR5 开始的 Html.Form() 现在只使用请求提供的 URL。但是,我对此并不满意,尤其是因为我将获得所包含的任何查询字符串的所有包袱。
你怎么看?
【问题讨论】:
标签:
asp.net-mvc
forms
model-view-controller
【解决方案1】:
当然是第二种方式。第一种方式是以程序员为中心,这不是 MVC 的 V 部分的内容。第二种方式更加以设计者为中心,只在需要的地方绑定到模型,让 HTML 尽可能自然。
【解决方案2】:
总的来说,我觉得我有点老派,因为我更喜欢滚动自己的 HTML 元素。
我也更喜欢像NHaml 这样的视图引擎,它使编写 HTML 几乎一个数量级简单。
【解决方案3】:
我必须同意你们两个的观点,我不太喜欢这种似乎正在集成到 MVC 中的简单 WebForms 样式。这些东西几乎看起来应该是一个 3rd 方库,或者至少是一个可以在需要或需要时包含的扩展库。
【解决方案4】:
我完全赞同老式的 HTML,这是设计师使用的。出于这个原因,我不喜欢包含太多以代码为中心的语法。我将 Web 表单视图引擎视为第三方库,因为我用不同的视图引擎替换了它。如果您不喜欢 Web 表单视图模型的工作方式或方向,您可以随时 go a different route。这是我喜欢 ASP.NET MVC 的主要原因之一。
【解决方案5】:
我同意 Andrew Peters,DRY。还应该指出的是,您可以将控制器、操作和参数指定给 .Form() 帮助程序,如果它们符合您的路由规则,则不会使用查询字符串参数。
我也理解 Will 所说的 MVC 中的 V。在我看来,我认为将代码放在视图中只要是为了视图 就不是问题。如果您不小心,很容易跨越控制器和视图之间的界限。就我个人而言,我无法忍受将 C# 用作模板引擎而不流血或产生谋杀某人的冲动。这有助于我保持逻辑分离,C# 中的控制器逻辑,盲文中的视图逻辑。
【解决方案6】:
使用帮助器的原因是它们允许您以一致且 DRY 的方式封装常见模式。将它们视为一种重构视图以消除重复的方式,就像使用常规代码一样。
例如,我blogged 介绍了一些可以基于模型构建 url 的 RESTful NHaml 助手。