Создание вспомогательного метода HTML - MVC Framework - PullRequest
2 голосов
/ 12 марта 2010

Я изучаю MVC из учебников Стивена Уолтера на веб-сайте MSDN. Он предполагает, что мы можем создать метод Html Helper.

Пример скажите

using System;
namespace MvcApplication1.Helpers
{
          public class LabelHelper
          {
               public static string Label(string target, string text)
               {
                    return String.Format("<label for='{0}'>{1}</label>",
                    target, text);
               }
          }
}

Мой вопрос, в какой папке мне нужно создать эти классы?

Просмотр папки или папки контроллера? или я могу поместить его в папку App_Code?

Ответы [ 4 ]

2 голосов
/ 12 марта 2010

Я бы создал подпапку Extensions, в которой определяются вспомогательные методы:

namespace SomeNamespace
{
    public static class HtmlHelperExtensions
    {
        public static string MyLabel(this HtmlHelper htmlHelper, string target, string text)
        {
            var builder = new TagBuilder("label");
            builder.Attributes.Add("for", target);
            builder.SetInnerText(text);
            return builder.ToString();
        }
    }
}

По вашему мнению, вам нужно сослаться на пространство имен и использовать метод расширения:

<%@ Import Namespace="SomeNamespace" %>

<%= Html.MyLabel("abc", "some text") %>
1 голос
/ 12 марта 2010

Вы можете разместить его где угодно. Важно то, что это имеет смысл для вас (и всех, кто работает над проектом). Лично я держу своих помощников на этом пути: /App/Extensions/.

0 голосов
/ 12 марта 2010

Вы можете поместить в папку Models или App_Code (не уверен, какая поддержка для этого есть в MVC); было бы лучше иметь в отдельной библиотеке. Кроме того, вспомогательные html-расширения являются методами расширения, которые должны начинаться с этого html-параметра HtmlHelper, например:

public static class LabelHelper 
         { 
               public static string Label(this HtmlHelper html, string target, string text) 
               { 
                    return String.Format("<label for='{0}'>{1}</label>", 
                    target, text); 
               } 
          } 

РЕДАКТИРОВАТЬ: Вы можете ссылаться на это в пространстве имен, добавив его в:

<pages>
   <namespaces>

Элемент в файле конфигурации также, таким образом, вы определяете пространство имен один раз, и на него ссылаются везде.

0 голосов
/ 12 марта 2010

Поместите это в код приложения. Однако ASP.NET MVC 2 уже имеет функциональность Label.

...