Рубрика «Программирование»

Создаем свои шаблоны в EditorTemplates (asp.net-mvc)

В папке EditorTemplates располагаются шаблоны, которые можно вызывать посредством htmlhelper-ов @Html.EditorFor и @Html.Editor. Создадим шаблон для текстового поля создадим файл Text.cshtml в папке /Views/Shared/EditorTemplates и напишем такие строчки в нем: @{ var classAttr = ViewData[«class»]; var placeholder = ViewData[«placeholder»]; var disabled = ViewData[«disabled»]; var readonlyAttr = ViewData[«readonly»]; var name = Html.NameFor(m => m); var id = …

Создаем класс для хранения данных для рабочего потока (Thred Local Storage)

Иногда есть данные которые хочется сохранить для текущего рабочего потока и многие сохраняют их в HttpContext.Current.Items.  Но такой способ привязывает все приложение к asp.net mvc. Создадим класс TLS(Thread Local Storage), чтобы по возможности можно было использовать ThreadStatic или CallContext, в зависимости от режима TlsMode. public enum TlsMode { HttpContext, ThreadStatic, CallContext } public class TLS : ITLS …

Создаем html при помощи RazorEngine без контроллеров mvc (asp.net-mvc)

Подключаем библиотеку RazorEngine при помощи менеджера пакетов nuget. Пишем метод который на вход принимает путь к представлению и модель, а на выходе отдает html строку public static class RenderViewHelper { public static string RenderPartialToString(string viewPath, object model) { string viewAbsolutePath = MapPath(viewPath); var viewSource = File.ReadAllText(viewAbsolutePath); string renderedText = Razor.Parse(viewSource, model); return renderedText; } public static …

Реализуем обобщенную фабрику

public interface IFactory<TContext, TObject> { TObject Create(TContext context); } public class DefaultFactory<TContext, TObject> : IFactory<TContext, TObject> { private Func<TContext, TObject> _factory; public DefaultFactory() { } public DefaultFactory(Func<TContext, TObject> factory) { _factory = factory; } public virtual TObject Create(TContext context) { if (_factory == null) throw new NotImplementedException(«It is necessary to implement factory method.»); return _factory(context); …

Создаем excel документ (c#)

Есть много библиотек, с помощью которых можно создать excel документ. В данной заметке я опишу как использовать библиотеку Epplus. public static class ExcelUtils { public static DataTable ExcelToDataTable(string path) { // https://calmsen.ru/parsim-excel/ } private static void SetDefaultOptions(Dictionary<string, string> options) { if (!options.ContainsKey(«Worksheet.name»)) options[«Worksheet.Name»] = «Лист1»; if (!options.ContainsKey(«Worksheet.TabColor»)) options[«Worksheet.TabColor»] = «Blue»; if (!options.ContainsKey(«Worksheet.DefaultColWidth»)) options[«Worksheet.DefaultColWidth»] = «24»; …

Создаем базовый репозиторий

Для того чтобы контекст бд сохранялся из репозитория в репозиторий, можно сохранять данный контекст в HttpContext.Current.Items и получать его из этого контекста(HttpContext) когда необходимо. Создадим абстрактный базовый репозиторий, который будет содержать данную логику. Наш базовый репозиторий: public abstract class BaseRepository { public DefaultDatabase DbContext { get { return TLS.Get<DefaultDatabase>(«DbContext»); } } } Контекст базы данных создадим …

Создаем ActionFilterAttribute для фильтрации доступа к ресурсам

И так нужно проверить существование ресурса и принадлежит ли данный ресурс пользователю. В случае не выполнения одного из условий бросаем исключение NotFoundException. using InfoShop.Infrastructure; using System; using System.Linq; using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace WebApp.Controllers { public class UserFilteredAttribute : ActionFilterAttribute { private Type _domainType; private string _paramName; private string[] _itemIdPropertyPath; public UserFilteredAttribute(Type domainType, string paramName, …

Собираем статические файлы в dll (asp.net mvc)

Для того, чтобы статические файлы можно было собрать в отдельную библиотеку, нужно у этих файлов поставить свойство «Build Action» в значение «Embedded Resource». После того как все файлы будут находится в отдельной сборке, нужно научить приложение доставать эти файлы из dll. Пусть все статические файлы находятся в папке Content. Например javacript файлы в папке /Content/JS, …

Soap вызов, используя jquery.ajax

Иногда не хочется делать запрос с клиента на свой сервер, который в свою очередь, используя soap клиент, делает запрос еще на один сервер (soap сервер). Сделаем запрос на soap сервер сразу с клиента. Код js на клиенте var soapMessage = ‘<soap:Envelope xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»>’ + ‘<soap:Body>’ + ‘<SomeMethod>’+ ‘<Arg1>Arg1 Value</Arg1>’+ ‘<Arg2>Arg2 Value</Arg2>’+ ‘</SomeMethod>’+ ‘</soap:Body>’ + ‘</soap:Envelope>’; …

Скрываем публичные свойства, через которых происходит внедрение зависимостей ninject (c#)

Допустим есть свойство, через которое ninject внедряет зависимость [Inject] public IUsersService UsersService { get; set; } И очень хочется скрыть это свойство, так как данное свойство используется только внутри класса. Для этого делаем свойство защищенным или приватным [Inject] proteced virtual IUsersService UsersService { get; set; } И в Global.cs прописываем следующие строки var kernel = …