В MVC3 возможно ли создавать повторно используемые функции в представлении?

#asp.net #asp.net-mvc-3

#asp.net #asp.net-mvc-3

Вопрос:

Я говорю не о функциях javascript, а о серверных функциях, написанных на c #.

Для таблицы html в моем представлении я создаю заголовки таблиц, которые действуют как сортируемые столбцы. Но возможность сортировки зависит от сложной логики, поэтому я хочу поместить логику в функцию вместо записи ее для каждого столбца.

@Amr ElGarhy Спасибо, что предложили customer helper, но класс helper, который я создаю, не регонизируется.

Вспомогательный код:

 namespace MyHtmlHelpers
{
    public static class CustomHelpers
    {
        public static string MySortColumn(this HtmlHelper helper, string label, string col, string dir, UrlHelper url)
        {
            return string.Empty;
        }
    }
}
  

web.config:

 <pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages"/>
    <add namespace="MyHtmlHelpers"/>
  </namespaces>
</pages>
  

Но в представлении нет ни @HtmlHelper.MySortColumn ни @Html.MySortColumn повторно настроен. Я что-то здесь упускаю? Я даже перезапустил свой компьютер.

ОБНОВЛЕНИЕ добавление пространства имен в web.config у меня не сработало. добавление страницы просмотра работает.

Комментарии:

1. попробуйте добавить это в первую строку вашего представления: ‘@using MyHtmlHelpers’

Ответ №1:

Я думаю, вам нужно взглянуть на помощники HTML и на то, как создать пользовательский:

http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

http://www.asp.net/mvc/videos/how-do-i-create-a-custom-html-helper-for-an-mvc-application

Ответ №2:

Ответ №3:

Лучше создать базовый класс с логикой и выводить свои представления из этого класса. Обычно вы не должны раскрывать какие-либо методы для повторного использования между представлениями.

Комментарии:

1. цель состоит в том, чтобы повторно использовать в одном представлении, а не делиться между другими.

2. Почему эта функциональность должна быть изолирована только для одного представления? Есть ли проблема безопасности, которая не учтена?

3. Я создаю служебный класс / метод для удобства кодирования.

Ответ №4:

Используете ли вы области? Области имеют свою собственную папку view и обычно имеют свой собственный web.config. Если это так, вы можете попробовать добавить пространство имен в этот web.config.

Кроме того, файлы web.config иерархически разрешаются через папки. Это означает, что в вашем каталоге базовой области может быть web.config, который влияет на все представления, относящиеся к конкретной области.

В моем случае у меня есть два файла web.config, куда я добавляю свои пространства имен — один находится в каталоге View, а другой — в каталоге Area.

Комментарии:

1. Я не использую области. Но я могу смириться с добавлением инструкций «using» в верхней части страницы просмотра.