Ответы пользователя по тегу ASP.NET
  • Как можно передать объект в JS скрипт?

    @kttotto
    пофиг на чем писать
    const traing = @JsonConvert.SerializeObject(traingObj)
    start(traing )
    Ответ написан
    Комментировать
  • Как грамотно использовать API?

    @kttotto
    пофиг на чем писать
    Сделать отдельный сервис, в котором Вы через апи будете получать список контрагентов.
    В контроллер этот сервис заинжектить.
    В методе контроллера, через этот сервис, получить контрагентов и эти данные, вместе в viewModel, отдать на вьюшку.

    4) Простой механизм, это HttpClient, проще уже некуда.
    Ответ написан
    Комментировать
  • Как правильно варить многопоточность на тасках?

    @kttotto
    пофиг на чем писать
    Вы ошибаетесь. У Вас нет параллельного выполнения задач в методе GetStatistic().
    Вот это count.Result равносильно
    count = db.Image.CountAsync().Result
    Это обычное синхронное выполнение.

    Вот так Task.WaitAll(count, notReady); Вы запустили задачи параллельно, но результат из них так не получите.
    Если в цикле хотите тело цикла выполнять в разных потоках, используйте Parallel.ForEach
    Ответ написан
    7 комментариев
  • Нормально ли использовать SignalR для реал-тайм отображения данных?

    @kttotto
    пофиг на чем писать
    Я бы предпочел вариант, что сигнал отправляет клиенту сообщение, что данные на бэке обновились, можно даже с типом данных, а клиент уже решает когда и какой тип данных обновить (дернуть апи на бэке с данными).
    Ответ написан
  • WebApi + Razor как это должно работать?

    @kttotto
    пофиг на чем писать
    Mvc на основе cshtml файлов генерит html и отдает его клиенту. Тоже самое можете делать Вы сами руками в WebApi приложении, используя RazorEngine.Templating.
    Вот ссылка на похожий вопрос.
    И прилагаю урезанный пример, который мы использовали у себя для генерации отчетов, я думаю разберетесь.
    spoiler
    public class RazorTemplateGenerator
    {
    	public void SetupReportTemplating(string baseDirectory = null)
    	{
    		var cfg = new TemplateServiceConfiguration
    		{
    			Debug = true
    		};
    
    		Engine.Razor = RazorEngineService.Create(cfg);
    
    		var folder = Path.Combine(baseDirectory ?? System.AppDomain.CurrentDomain.BaseDirectory, "Pages","PageTemplates");
    		var templates = Directory.GetFiles(folder, "*.cshtml");
    		foreach (var fName in templates)
    		{
    			var info = new FileInfo(fName);
    			var tName = Path.GetFileNameWithoutExtension(info.Name);
    			var template = File.ReadAllText(fName);
    			var src = new LoadedTemplateSource(template, fName.Replace(@"\bin",String.Empty));
    			Engine.Razor.AddTemplate(tName, src);
    		}
    	}
    
    	public void CheckCompile(string name)
    	{
    		Engine.Razor.Compile(name);
    	}
    
    	public string RenderPage(string viewName, object model)
    	{
    		return Engine.Razor.RunCompile(viewName, model.GetType(), model);
    	}
    }
    Ответ написан
    Комментировать
  • Что посоветуете для динамического рендеринга html в ASP.NET MVC приложении?

    @kttotto
    пофиг на чем писать
    На razor сингл пейдж не сделать, ибо razor - это рендеринг на стороне сервера. Можно реактом и не пользоваться, но без js не обойтись. Аяксом запросить частичное представление и результат вставить в блок модального окна.

    В коде это примерно так будет
    $.ajax({
    	type: "POST",
    	url: window.baseUrl + "Controller/Action",
    	data: params,
    	success: function (result) {
    		if (result) {
    			$(".modal").html(result);
    		}
    	})
    	
    public ActionResult Action(IncomingParameters params)
    {
    	var model = Anything(params);
    	return PartialView("Action", model);
    }
    Ответ написан
  • Как создать экземпляр контекста базы данных?

    @kttotto
    пофиг на чем писать
    Передавать в конструктор надо экземпляр DbContextOptions.
    Это можно делать либо руками, либо с помощью DI
    док
    В простом варианте руками это будет выглядеть так:
    var timeout = 600;
    var optionsBuilder = new DbContextOptionsBuilder<InstituteContext>()
    	.UseSqlServer(new SqlConnection(connectionString), opt =>
    	{
    		opt.CommandTimeout(timeout);
    	});
    	
    using (var context = new InstituteContext (optionsBuilder.Options))
    {
      // your code
    }
    Ответ написан
  • Зацикливание при загрузке связанной сущности, как исправить?

    @kttotto
    пофиг на чем писать
    Попробуй вместо Include использовать Load
    Ответ написан
  • Как привести Date обьект js в DateTime формат C#?

    @kttotto
    пофиг на чем писать
    К Вам приходит дата с учетом часового пояса. Тип DateTime часовой пояс не учитывает, значит Вы будете терять время при приведении. Если время зависит от локали и часовой пояс необходим, то принимать время нужно в формате DateTimeOffset (ну или приводить к нему, если принимаете строку), тогда время теряться не будет.
    Ответ написан
  • Как в NewTonSoft задать схему десериализации ответа?

    @kttotto
    пофиг на чем писать
    Думаю, что ошибка в строке
    string json2 = @"{['Шляпа','Кепка']}";
    Все, что в фигурных скобках - это объект, но у Вас массив. Попробуйте
    string json2 = @"['Шляпа','Кепка']";
    Ответ написан
    1 комментарий
  • .NET Core Web Api EF Как сделать группировку значений в запросе?

    @kttotto
    пофиг на чем писать
    GroupBy по сути Вам вернет массив массивов, к List привести Вы его не сможете, можете привести к Dictionary, например
    var orders = db.Orders
                    .Where(x => x.Kod == kod)
                    .GroupBy(x => x.Nomenklatura)
                    .ToDictionary(x => x.FirstOrDefault().Nomenklatura, x => x.ToList() )

    тогда получить сгруппированное можно по ключу
    orders["anyNomenklatura"]
    и там будет список
    Ответ написан
  • Как получить данные json в контроллере?

    @kttotto
    пофиг на чем писать
    FromBody может быть только один из параметров метода контроллера. И обычно это сложный тип, нет смысла отмечать им примитивы. Проверьте, есть ли вообще параметр в теле запроса: поставьте брейк поинт на самое начало метода и провалитесь в this.Request.Body, посмотрите чьи там параметры. Я предполагаю, что там в лучшем случае будет List. Попробуйте так (string id, [FromBody] List roles). Если так не сработает, то тогда нужно сделать так, как сказала Даша Циклаури.
    Ответ написан
    Комментировать
  • Как кикнуть пользователя в ASP.NET Identity?

    @kttotto
    пофиг на чем писать
    Есть несколько способов:
    1) Если это asp.mvs, то переопределить атрибут Authorize, в ней делать проверку пользователя по какому то полю IsBlackList.
    2) Если это так же asp.mvs, то наверняка Вы поле IsBlackList добавили в Claim, значит авторизацию можно делать на основе Claims и методы помеченные этим атрибутом, будут отсеивать заблокированных. Подробно тут.
    3) Если это asp core, то все тоже самое делается на основе политик безопасности, примеры так же тут.
    4) Но как по мне, то самый простой способ, это при блокировке менять роль пользователю и соответственно контроллеры должны быть помечены теми политиками, в которые не входит роль заблокированного. Этого должно хватить, после блокировки, первый же запрос проверит роль и переадресует на страницу логина.
    Ответ написан
    Комментировать
  • Как получить роль, начинающуюся с определенных символов?

    @kttotto
    пофиг на чем писать
    Если это Core, то использовать политики, что-то примерно
    public void ConfigureServices(IServiceCollection services)
    {
    	services.AddAuthorization(x => 
    	{
    		x.AddPolicy("RoleStartWith", policy => { 
    				policy.RequireRole(roles.Where(r => r.StartsWith("ad")));
    			});
    	});
    }
    
    [Authorize(Policy = "RoleStartWith")]
    public IActionResult Index()
    {
    	return View();
    }

    Если это, например, MVC5, то можно использовать кастомный атрибут как то так:
    public class CustomAutorizeAttribute : AuthorizeAttribute
    {
    	private string _prefix;
    	private string[] _roles;
    
    	public CustomAutorizeAttribute(string prefix)
    	{
    		_prefix = prefix;
    		_roles = base.Roles.Split(',').Select(x => x.Trim()).ToArray();
    	}
    
    	protected override bool AuthorizeCore(HttpContextBase httpContext)
    	{
    		return _roles.Where(x => x.StartsWith(_prefix)).Any(x => httpContext.User.IsInRole(x));
    	}
    }
    
    [CustomAutorize(prefix = "ad")]
    public IActionResult Index()
    {
    	return View();
    }

    Писал все на коленке в блокноте, руками не проверял, но основная мысль, надеюсь, понятна.
    Ответ написан
    Комментировать
  • Две и более строки подключения и сессии?

    @kttotto
    пофиг на чем писать
    Вы можете сделать сколько угодно конекшин стрингов в настройках, у каждого свое имя. Сделайте абстракцию над подключением к бд, туда будете передавать имя конекшина и работайте с методами этой абстракции уже.

    В простом виде это примерно так
    <connectionStrings>
      <add name="DB1Connection" connectionString="data source=(local);initial catalog=myDB1;" />
      <add name="DB2Connection1" connectionString="data source=(local);initial catalog=myDB2;" />
      <add name="DB3Connection1" connectionString="data source=(local);initial catalog=myDB3;" />
    </connectionStrings>
    
    connectionStringName = "DB3Connection1";
    
    public class MyDbContext : DbContext
    {
    	public MyDbContext(string connectionStringName) : base(connectionStringName)
    	{	}
    }

    Если схемы баз один одинаковые, то достаточно одного класса контекста

    Как только пользователь тыкнул на другой сервер, Вы разлогинили его, создали новый конекшин и залогинили его по новой, но в выбранном контексте и перегрузили страницу.
    Ответ написан
    4 комментария
  • Поэтапный (частичный) перевод веб-приложения с MVC3 на MVC5 или Core?

    @kttotto
    пофиг на чем писать
    Тут надо в код смотреть, все от многого зависит: как реализованы права, роли, как аутентификация работает. В мвс3 идентити еще не было, надо было руками мембешип провайдер реализовывать, в каком виде Вы его переносить собираетесь?
    И потом, почему на мвс5, а не сразу на коре?
    Не зная структуры, тяжело что-то сказать однозначно. Но я бы, наверное, в такой ситуации завел новый проект и просто по тихому переносил в него куски кода, которые можно перенести, а что-то писал по новой. Если переносить с хвоста, то можно упереться в тупик, когда ядро невозможно будет изменить.
    Ответ написан
    Комментировать
  • Что нужно знать начинающему разработчику asp.net mvc?

    @kttotto
    пофиг на чем писать
    получается чтобы стать начинающим разработчиком, необходимо сходу знать весь стек, пускай и не совсем глубоко?

    Совершенно верно. К этому списку еще sql добавьте.
    Ответ написан
  • Как создать шаблонные элементы asp.net?

    @kttotto
    пофиг на чем писать
    Для этого есть много вариантов:
    1. Частичные представления. Просто, но логику надо писать внутри разметки, либо выносить наружу.
    2. Html - хелперы.
    3. Tag - хелперы.
    4. View Component. Если требуется что-то с более сложной логикой, чем просто разметка, то лично я использую этот способ. Почитать за него можно тут.
    Ответ написан
    2 комментария
  • Как привязать динамически создающиеся элементы формы к Dictionary?

    @kttotto
    пофиг на чем писать
    При данном раскладе - никак. Вы учтите, что разоровская разметка во вьюшке выполняется на стороне сервера, она отрабатывает во время рендеринга html разметки на основе кода cshtml, а js код выполняется на стороне клиента и он ничего не знает о Вашем dictionary.

    Я вижу, как вариант решения, Вашу таблицу выводить как частичное представление и при каждом добавлении/удалении строки делать запрос на сервер с параметрами новой строки и он будет возвращать новую таблицу, ну и соответственно dictionary будет обновляться.

    Второй вариант, при добавлении строки делать аякс запрос на сервер с новыми параметрами для словаря, а возвращаться будет частичное представление, где будет код, подобие этого

    @model  Dictionary<string, string> AdditionalFields
    
    <script>
    	var additionalFields = [];
    	@foreach(var field in AdditionalFields)
    	{
    		@:additionalFields.push({ '@field.Key', '@field.Value' })
    	}	
    </script>
    Ответ написан
    1 комментарий
  • Используя метод return Json() на клиенте в success function(data) undefined. Как исправить?

    @kttotto
    пофиг на чем писать
    Сделайте запрос к своему api в строке браузера или через postman. Если придет нормальный json, значит дело в запросе ajax, в его настройках, если нет - значит не сериализуется объект в json.
    Ответ написан
    6 комментариев