首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建自定义控件mvc3

创建自定义控件mvc3
EN

Stack Overflow用户
提问于 2011-06-16 12:14:45
回答 1查看 1.9K关注 0票数 0

刚刚开始掌握MVC3的窍门,想要开始构建一些可以直接放入视图中的自定义控件。具体地说,我希望能够插入一些html表单控件,这些控件会自动添加一些javascript进行验证。

这就是我想要的:

代码语言:javascript
运行
复制
@Html.VTextBox("MyTextBox","",new {@vType="PhoneNumber", @vMessage="You Must Enter a Phone Number" })

当页面呈现时,我希望它搜索我创建的任何自定义元素,然后放入适当的javascript来验证客户端。我用自定义控件的asp.net web表单做了一些非常类似的事情(例如

代码语言:javascript
运行
复制
<ucc:VTextBox ID="MyTextBox" runat="server" message="You must fill this in" />

我只是想知道MVC3是否提供了同样的可扩展性。如果您能提供任何资源或建议,我们将不胜感激。

提亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-16 13:22:20

首先,您需要研究扩展方法,更具体地说,需要了解如何为HtmlHelper类创建扩展方法,以便编写类似于上面显示的示例的代码。

对于上面展示的示例,您可以编写如下代码:

代码语言:javascript
运行
复制
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());   
}

然后,在您的视图中,您可以像这样使用上面的示例:

代码语言:javascript
运行
复制
@Html.VTextBox("MyTextBox","",new {@vType="PhoneNumber", @vMessage="You Must Enter a Phone Number" })

注意:您需要将扩展方法所在的名称空间导入到视图中。最简单的方法是在视图的顶部放置一个@using ExtensionMethodNamespace。通过摆弄web.config (可能还有Global.asax),您可以使名称空间自动导入到所有视图中。

附录:请注意下面RPM1984的评论,他建议使用TagBuilder代替StringBuilder,这是一个合理的建议,因为这正是TagBuilder设计的场景。他还提到了强大的键入模型的帮助器,这也是一个很好的建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6367034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档