создавать пользовательские элементы управления mvc3 - PullRequest
0 голосов
/ 16 июня 2011

Я только начинаю изучать MVC3 и хочу создать некоторые пользовательские элементы управления, которые я могу просто добавить в представление.В частности, я хочу иметь возможность добавить некоторые элементы управления HTML формы, которые автоматически добавят JavaScript для проверки.

что-то вроде этого, что я хотел бы:

@Html.VTextBox("MyTextBox","",new {@vType="PhoneNumber", @vMessage="You Must Enter a Phone Number" })

когда страницарендеринга, я хотел бы, чтобы он поиска любых пользовательских элементов, которые я создаю, а затем вставьте в соответствующий javascript для проверки на стороне клиента.Я сделал нечто очень похожее на это с веб-формами asp.net для пользовательских элементов управления, то есть

<ucc:VTextBox ID="MyTextBox" runat="server" message="You must fill this in" />

, просто задаваясь вопросом, предлагает ли MVC3 такую ​​же расширяемость.Будем весьма благодарны за любые ресурсы или советы, которые вы можете предоставить.

TIA

1 Ответ

1 голос
/ 16 июня 2011

Для начала вам нужно изучить методы расширения и, более конкретно, как создавать методы расширения для класса 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. Он также упоминает о строгом наборе помощника для модели, что также является отличным советом.

...