创建自定义控件mvc3

时间:2011-06-16 04:14:45

标签: asp.net-mvc-3 custom-controls

刚刚开始掌握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

1 个答案:

答案 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的设计目的。他还提到强力打字模型的助手,这也是很好的建议。

相关问题