刚刚开始掌握MVC3并希望开始构建一些我可以放入视图的自定义控件。具体来说,我希望能够放入一些html表单控件,它会自动添加一些javascript进行验证。
像这样的东西就是我想要的东西:
@Html.VTextBox("MyTextBox","",new {@vType="PhoneNumber", @vMessage="You Must Enter a Phone Number" })
当页面呈现时,我希望它搜索我创建的任何自定义元素,然后放入相应的javascript来验证客户端。我使用asp.net web表单为自定义控件做了非常类似的事情,即
<ucc:VTextBox ID="MyTextBox" runat="server" message="You must fill this in" />
只是想知道MVC3是否提供了相同的可扩展性。您将提供的任何资源或建议将不胜感激。
TIA
答案 0 :(得分:1)
首先,您需要查看扩展方法,更具体地说,如何为HtmlHelper类创建扩展方法,以便您可以像上面显示的示例一样编写代码。
对于上面显示的示例,您可以编写如下代码:
public MvcHtmlString VTextBox(string name, object value, object htmlAttributes)
{
StringBuilder html = new StringBuilder();
// Build your html however you want
// Here's a simple example that doesn't
// take into account your validation needs
html.AppendFormat("input type=\"text\" name=\"{0}\" value=\"{1}\" />", name, value);
return MvcHtmlString(html.ToString());
}
然后在您的视图中,您可以使用上面的示例:
@Html.VTextBox("MyTextBox","",new {@vType="PhoneNumber", @vMessage="You Must Enter a Phone Number" })
注意:您需要将扩展方法所在的命名空间导入到您的视图中。最简单的方法是将@using ExtensionMethodNamespace
放在视图的顶部。您可以通过摆弄web.config(以及Global.asax)来自动将命名空间导入到您的所有视图中。
ADDENDUM:请注意下面的RPM1984评论,他建议使用TagBuilder代替StringBuilder,这是一个很好的建议,因为这是TagBuilder的设计目的。他还提到强力打字模型的助手,这也是很好的建议。