有谁知道为什么某些 HTML 表单控件可以使用System.Web.Mvc.HtmlHelper(隐藏、复选框、密码、文本框)呈现,而有些不能并且应该明确地用 HTML(文件、提交)编写?这种分离的原理是什么?
2 回答
好问题。
我认为输入控件(例如输入、选择)包含在 Html 帮助程序中,因此它们可以通过 TempData 维护自己的状态,而无需用户编写大量代码来实现。我还认为链接和表单控件被包装以提供一种简单且统一的方式来指定这些控件的控制器/操作。大多数其他控件不保证开箱即用的状态管理或需要构建控制器/操作 url。
当然,没有什么可以阻止您为喜欢的控件编写自己的包装器 - 例如,这是我使用的一对 - 这是用于 html 标签控件的一个:
public static string Label(this HtmlHelper helper, string fieldName, string labelText)
{
var sb = new StringBuilder();
sb.Append("<label for=\"");
sb.Append(fieldName);
sb.Append("\">");
sb.Append(labelText);
sb.Append("</label>");
return sb.ToString();
}
这是我使用的一个,它包装了该标签助手和一个文本框,以生成一个带有标签的统一文本输入字段:
public static string TextField(this HtmlHelper helper, string labelText, string fieldName, string value)
{
return string.Concat(
"<div>",
helper.Label(fieldName, labelText),
helper.TextBox(fieldName, value),
"</div>");
}
我在“Preview4 中缺少 Html.SubmitButton()”线程中找到了 Phil Haack 的答案?关于问题:
是的,我们正在努力让助手保持简约。不仅如此,我们还收到了一些人的反馈,认为我们的许多助手是不必要的。“我知道 HTML,为什么我需要一个 SubmitButton 助手?”。
我们认为,由于输入按钮通常不用于呈现用户输入,因此辅助方法具有边际价值。毕竟,使用 VS HTML 编辑器,您可以在键入 . 它告诉您哪些属性可用。我们的助手没有。
...
我们要避免的事情是每个 html 元素都有一个助手。那没有任何意义:Html.Div。
我们想为助手提出一个设计原理。也许我们有一个所有常见的表单元素,而不仅仅是显示用户输入的那些。这是一种可能性,在这种情况下我们将包括 SubmitButton。
现在,我们的基本原理是任何呈现用户输入的通用表单助手,或任何呈现路由信息的助手,都有一个助手......