using VOL.Core.Dapper; using VOL.Core.DBManager; using VOL.Core.EFDbContext; using VOL.Core.Extensions; using VOL.Entity.DomainModels; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using System; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VOL.Core.BaseProvider.DictionaryComponent { /// /// 组件视图,参照:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.1 /// 与Controller命名一样必须以ViewComponent结尾 /// public class DictionaryViewComponent : ViewComponent { public async Task InvokeAsync(string dropDownIds) { if (string.IsNullOrEmpty(dropDownIds)) return null; string[] dicNos = dropDownIds.Split(','); StringBuilder stringBuilder = new StringBuilder(); VOLContext context = DBServerProvider.GetEFDbContext(); var dicData =await (from d in context.Set() join list in context.Set() on d.Dic_ID equals list.Dic_ID into t from list in t.DefaultIfEmpty() where dicNos.Contains(d.DicNo) select new { list.DicValue, list.DicName, d.Config, d.DbSql, list.OrderNo, d.DicNo }).ToListAsync(); foreach (var item in dicData.GroupBy(x => x.DicNo)) { stringBuilder.AppendLine($" var optionConfig{item.Key} = {item.Select(x => x.Config).FirstOrDefault()}"); string dbSql = item.Select(s => s.DbSql).FirstOrDefault(); stringBuilder.AppendLine($@" var dataSource{item.Key} = { (!string.IsNullOrEmpty(dbSql) ? DBServerProvider.GetSqlDapper().QueryList(dbSql, null).Serialize() : item.OrderByDescending(o => o.OrderNo). Select(s => new { s.DicName, s.DicValue }).ToList() .Serialize()) }.convertToValueText(optionConfig{item.Key})"); stringBuilder.AppendLine($" optionConfig{item.Key}.data = dataSource{item.Key};"); } ViewBag.Dic = stringBuilder.ToString(); return View("~/Views/Shared/Dictionary.cshtml"); } } }