首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,590 阅读
2
Mac打印机设置黑白打印
4,903 阅读
3
修改elementUI中el-table树形结构图标
4,874 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,654 阅读
5
intelliJ Idea 2022.2.X破解
4,333 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
微信小程序
Oracle
Laughing
累计撰写
618
篇文章
累计收到
1,419
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
618
篇与
的结果
2018-01-09
Oracle中删除表空间提示ORA-00604和ORA-38301
今天需要在本机上腾出空间,发现Oracle中有一个dbf文件占了约30G,这个数据文件对应的用户平时很少使用的,于是就想对它进行处理-删除表空间操作。本机的数据库是32位的10.2.0.1.0,表空间为TEST_TB存在若干个表数据。刚开始时用dba角色的system用户,直接执行drop tablespace test_tb including contents and datafiles;提示ORA-00604:递归SQL级别1出现错误ORA-38301:无法对回收站中的对象执行DDL/DML原因:dba_segments中存在该表空间test_tb的数据,可通过dba用户执行查询:select segment_name,segment_type,owner from dba_segments where tablespace_name='TEST_TB';处理方法:用该表空间所对应用户登录执行purge recyclebyin;重新执行drop tablespace test_tb incluing contents and datafiles;执行完毕后,dbf文件不存在,空间也腾出来了。
2018年01月09日
1,482 阅读
0 评论
23 点赞
2018-01-07
回首2017,展望2018
关于最近长时间没有更新博客 经常访问我博客的博友应该发现,我有很长一段时间没有更新博客了。之所以最新没有更新博客,是因为我最近换工作了,由于刚进入公司,好多东西有待熟悉,所以经常需要加班。回家之后也没时间学习了,导致最近没有更新博客。聊聊工作 既然上面说到了,我换了工作,那就简单展望一下自己的工作吧。17年初的时候,从浪潮离职,当时抱着一份学习技术的心情,打算投身到BS阵营中区(当时在浪潮主要是从事CS开发),后来在A公司干了大概一年吧,实在无法忍受那个缓慢的节奏,所以18年初重新回到了浪潮。 其实去外面走了一遭,感觉还是大浪潮这样比较适合我吧。大家齐心协力做事情。如果不出意外,未来应该是长时间在浪潮待下去了。聊聊生活关于孩子 之前房子装修,孩子在老家待了有半年的时间,现在孩子回来啦,虽然很调皮,但是作为父母的,只能说好好爱他,不求他将来飞黄腾达,但求一生平安快乐。关于钱 这真是一个悲伤的话题。去年欠多少钱,今年貌似还是那么多。18年争取上半年先把钱还清。关于车 家里希望我买个10多万的家用车。性价比比较高。但是我还是比较钟情凯迪拉克。18年继续奋斗,争取年底能买一款XTS吧。
2018年01月07日
1,102 阅读
0 评论
1 点赞
2018-01-02
局域网中远程重启服务器的安全方法
在局域网中,管理和操作服务器一般我们都使用客户端的远程桌面连接,由于客户端非正常退出或断网、失电等原因,以及服务器自身宕机等各种原因,导致远程桌面无法连接服务器,而此时,只要服务器还可以Ping通,就用不着我们亲自到机房复位机器了,可以通过远程重启服务器的方法实现远程桌面的再次连接,由于在网上搜索到的远程关机或重启计算机的方法,很多时候都不实用,总结起来不外乎以下几种方法:将被控机器上的guest用户赋予远程关机的权限;或者是把客户端机器的登录用户加入远程机器的本地管理员组;或者本机和远程计算机要设置同样的用户名和密码。 以上方法都存在一定程度的不便或其他问题,如:授予guest用户远程关机的权限会带来严重的安全隐患,或者,需要事先在被控服务器上先行设置等问题。 其实,只要知道远程服务器的管理员密码和IP地址,在局域网中的任意一台机器上打开“命令提示符”窗口,运行以下命令:获取远程服务器的管理员权限net use \\IP地址 "管理员密码" /user:administrator使用shutdown命令远程重启服务器shutdown /r /t 0 /m \\IP地址 这样的方法,实现起来既方便简单又安全可靠,已在Windows 2003 2008R2上测试成功,Win7上也可用(需要开启administrator账户),值得大家一试!
2018年01月02日
1,194 阅读
0 评论
1 点赞
2017-12-24
Ubuntu各版本下安装DotNetCore2.0
最近看了一下Linux安装DotNetCore的方法,发现微软官网上面的教程各种问题,还不如GitHub上面的。所以特地整理了一下Ubuntu下面的安装命令,作为日后的记录。温馨提示如果之前有安装的预览版的DotNetCore,需要先进行卸载,命令如下sudo apt remove dotnet-dev-2.0.0-preview2-006497 Ubuntu 17.04curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-zesty-prod zesty main" > /etc/apt/sources.list.d/dotnetdev.list' Ubuntu 16.04curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list' Ubuntu 14.04curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
2017年12月24日
1,376 阅读
2 评论
1 点赞
2017-12-15
Nana主题移除评论者网址
不管是为了网站权重还是为了防止垃圾评论,我们一般都是建议移除掉wordpress默认的评论者网址的。现在网上很多的教程都是说如何隐藏掉评论的网址框,但是即使我们隐藏掉了评论框,仍然无法阻挡一些机器评论。所以我们这里就说一下Nana主题如何测试移除评论者网址。 首先我们找到Nana主题下的/inc/functions/文件夹,里面有一个comment-template.php文件。我们打开文件,定位到49行,如下 我们可以发现,调用了一个commentauthor函数。所以我们打开主题下面的functions.php文件,找到函数 我是直接注释掉了,大家也可以直接删除。然后打开任意一个有评论的文章,看一下,评论者的链接已经被移除了。
2017年12月15日
1,912 阅读
2 评论
0 点赞
2017-12-08
ASP.NET MVC客户端及服务端验证
在mvc中使用表单进行数据提交时,数据验证分为服务器端验证和客户端验证;我们可以通过使用HtmlHelper中的方法及在页面中引用js库对Model的属性的数据注解(System.ComponentModel.DataAnnotations命名空间下的一组类)进行解析,实现前端、后端的数据验证;其实客户端验证也是调用的jquery.validate.js,我个人觉得,通过数据注解,服务端的验证确实能够方便不少,但是客户端的验证,感觉还不如直接用jquery.validate来的方便。数据注解以及微软内置的验证这里就不多介绍了,这里我们主要介绍一下如何实现服务端和客户端自定义验证前期准备代码,实体类、控制器、视图实体类using me.lisen.MVC.Public; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace me.lisen.MVC.Models { public class Product { [Key] public string ID { get; set; } [Display(Name="产品名称")] [Required(ErrorMessage ="请输入产品名称")] [StringLength(2,ErrorMessage ="最多输入两个字符")] public string Name { get; set; } [Display(Name ="价格")] [Required(ErrorMessage ="请输入价格")] [PriceValid(MinPrice =20.00,ErrorMessage ="价格不能低于20元")] public Decimal Price { get; set; } } }控制器using me.lisen.MVC.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace me.lisen.MVC.Controllers { public class ProductController : Controller { // GET: Product public ActionResult Create() { return View(); } [HttpPost] public ActionResult Create(Product product) { if (ModelState.IsValid) { return RedirectToAction("Create"); } return View(); } } }视图@model me.lisen.MVC.Models.Product @{ ViewBag.Title = "Create"; } <h2>Create</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>Product</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </div> } <div> @Html.ActionLink("Back to List", "Index") </div>服务端验证实现自定义的服务端验证非常简单,我们只需要继承ValidationAttribute类,然后重写IsValid()方法即可using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; using System.Web.Mvc; namespace me.lisen.MVC.Public { public class PriceValid:ValidationAttribute { public double MinPrice { get; set; } public override bool IsValid(object value) { if (value == null) { return true; } var price = Convert.ToDouble(value); if(price < MinPrice) { return false; } return true; } } }返回true或false代表验证是否通过。客户端验证自定义客户端验证就比较繁琐了,我们需要实现IClientValidatable接口的, public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context )方法,然后在方法中定义传递给js的方法名以及方法参数。实现接口IClientValidatableusing System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; using System.Web.Mvc; namespace me.lisen.MVC.Public { public class PriceValid:ValidationAttribute,IClientValidatable { public double MinPrice { get; set; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule(); rule.ErrorMessage = metadata.GetDisplayName() + "不能小于系统限制"; rule.ValidationParameters.Add("minprice", MinPrice); rule.ValidationType = "price"; yield return rule; } public override bool IsValid(object value) { if (value == null) { return true; } var price = Convert.ToDouble(value); if(price < MinPrice) { return false; } return true; } } }添加js文件/* 第一个参数是服务端ValidationType值 第二个参数必须是ValidationParameters.Add()的值 */ $.validator.unobtrusive.adapters.addSingleVal("price", "minprice"); $.validator.addMethod("price", function (value, element, param) { if (value) { var inputValue = parseInt(value, 10); var validateValue = parseInt(param, 10); if (inputValue < validateValue) { return false; } } return true; });页面引入js文件
2017年12月08日
1,504 阅读
2 评论
2 点赞
2017-12-06
asp.net mvc area区域
Area可以在原来的MVC项目中开辟一块单独的区域放置功能模块。独立出来的区域可以包含专用的M-V-C功能,也可以包含独立的路由和视图引擎。这里我们主要针对区域的创建以及区域相互调用还有路由限制进行简答的说明。创建MVC项目后,会包含一个HomeController,这里我们为了演示,在建立一个名为Home的区域。路由冲突Area创建完成后,如果我们直接访问,会提示找到多个与名为“Home”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间以搜索与此请求相匹配的控制器,则会发生这种情况。如果是这样,请通过调用带有 'namespaces' 参数的 "MapRoute" 方法的重载来注册此路由。出现这个的原因,是我们区域中的路由跟外部HomeController的路由发生了冲突,为了解决这个问题,我们必须对路由匹配规则进行限制。路由限制路由限制的方式由很多种,可以限制controller或者action等等,这里我们通过限制HomeController的命名空间来进行限制。打开App_Start文件夹,找到RouteConfig.cs文件,修改RegisterRoutes方法如下public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "me.lisen.WebUI.Controllers" } ); }修改完成后,我们再次打开运行项目发现能正常打开了通过routedebugger,我们可以看到首页匹配到了Home/Index上面区域相互访问创建完区域之后,我们可以外部需要访问内部区域,或者内部访问外部区域,这个可以通过便签助手,增加area属性解决。比如我们外部需要访问内部Home区域,只需要在标签助手在区域即可<a href="@Url.Action("Index","Home",new { area="Home"})">前往内部首页</a> 如果需要内部区域访问外部区域,将area设置成""即可<a href="@Url.Action("Index","Home",new { area=""})">前往外部首页</a> 温馨提示统一区域内相互访问时,不需要加area属性。
2017年12月06日
1,477 阅读
0 评论
1 点赞
2017-12-06
ASP.NET MVC使用Ninject
本文主要介绍的是通过构造函数加上配置文件的形式,完成注入工作。当然网上很多人也说不依赖XML是Ninject的一大优点,这里我也仅仅是进行演示,大家可以通过bind-to的方式直接进行的。安装NugetNuget的安装这里就不多介绍了,本文使用的Nuget包如下Ninject Ninject.Extensions.Xml温馨提示如果使用XML加载的方式,必须添加Ninject.Extensions.Xml包Ninject注入我们继承DefaultControllerFactory创建NinjectControllerFactory,代码如下using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Ninject; using System.Web.Mvc; using me.lisen.Db.CustomerDb; using System.Web.Routing; using System.Web; namespace me.lisen.Util.Loc { public class NinjectControllerFactory : DefaultControllerFactory { IKernel kernel; public NinjectControllerFactory() { kernel = new StandardKernel(); AddBinding(); } protected override IController GetControllerInstance(RequestContext context,Type controllerType) { return controllerType == null ? null : (IController)kernel.Get(controllerType); } public void AddBinding() { kernel.Load(HttpContext.Current.Server.MapPath(".")+"\\XmlConfig\\Ninject.xml"); //kernel.Bind<ICustomerDb>().To<CustomerDb>(); } } }创建接口和实现类,具体代码如下using me.lisen.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace me.lisen.Db.CustomerDb { public interface ICustomerDb { List<Customer> GetCustomers(); List<Customer> GetCustomers(string whereKey, string whereValue); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using me.lisen.Models; using Ninject; using System.Data.Entity; namespace me.lisen.Db.CustomerDb { public class CustomerDb : ICustomerDb { private readonly NorthwindContext context; [Inject] public CustomerDb() { context = new NorthwindContext(); } public List<Customer> GetCustomers() { return context.Customers.ToList<Customer>(); } public List<Customer> GetCustomers(string whereKey, string whereValue) { return context.Customers.Where(e => e.ContactName == whereValue).ToList<Customer>(); } } }修改Global.asax中Application_Start方法,添加以下代码ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 使用我们通过构造函数调用,修改控制器构造函数private readonly ICustomerDb customerDb; public CustomerController(ICustomerDb customerDb) { this.customerDb = customerDb; }xml文件配置<module name="Db"> <bind service="me.lisen.Db.CustomerDb.ICustomerDb,me.lisen.Db" to="me.lisen.Db.CustomerDb.CustomerDb,me.lisen.Db"></bind> </module>
2017年12月06日
1,383 阅读
0 评论
1 点赞
2017-12-04
asp.net core生成html页面
为了缓解服务器的压力,我们可以将一些不经常更新的页面生成html页面,然后保存到服务器,页面进行查询时,我们先查找html是否存在,如果存在,我们直接返回html页面,否则就生成对应的html页面。这里我们通过动作过滤器ActionFilterAttribute实现。定义属性using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace cc.lisen.Public.Attribute { /// <summary> /// 实现伪静态 /// </summary> [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public class StaticFileHandlerFilterAttribute : ActionFilterAttribute { public string Key { get; set; } /// <summary> /// 动作执行后 /// </summary> /// <param name="context"></param> public override void OnActionExecuted(ActionExecutedContext context) { //获取结果 IActionResult actionResult = context.Result; //判断结果是否是一个ViewResult if (actionResult is ViewResult) { ViewResult viewResult = actionResult as ViewResult; //下面的代码就是执行这个ViewResult,并把结果的html内容放到一个StringBuiler对象中 var services = context.HttpContext.RequestServices; var executor = services.GetRequiredService<ViewResultExecutor>(); var option = services.GetRequiredService<IOptions<MvcViewOptions>>(); var result = executor.FindView(context, viewResult); result.EnsureSuccessful(originalLocations: null); var view = result.View; StringBuilder builder = new StringBuilder(); using (var writer = new StringWriter(builder)) { var viewContext = new ViewContext( context, view, viewResult.ViewData, viewResult.TempData, writer, option.Value.HtmlHelperOptions); view.RenderAsync(viewContext).GetAwaiter().GetResult(); //这句一定要调用,否则内容就会是空的 writer.Flush(); } //按照规则生成静态文件名称 string controllerName = context.RouteData.Values["controller"].ToString().ToLower(); string actionName = context.RouteData.Values["action"].ToString().ToLower(); string id = context.RouteData.Values.ContainsKey(Key) ? context.RouteData.Values[Key].ToString() : ""; if (string.IsNullOrEmpty(id) && context.HttpContext.Request.Query.ContainsKey(Key)) { id = context.HttpContext.Request.Query[Key]; } string devicedir = Path.Combine(AppContext.BaseDirectory, "wwwroot"); if (!Directory.Exists(devicedir)) { Directory.CreateDirectory(devicedir); } //写入文件 string filePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", controllerName + "-" + actionName + (string.IsNullOrEmpty(id) ? "" : ("-" + id)) + ".html"); using (FileStream fs = File.Open(filePath, FileMode.Create)) { using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)) { sw.Write(builder.ToString()); } } //输出当前的结果 ContentResult contentresult = new ContentResult(); contentresult.Content = builder.ToString(); contentresult.ContentType = "text/html"; context.Result = contentresult; } } /// <summary> /// 动作执行前 /// </summary> /// <param name="context"></param> public override void OnActionExecuting(ActionExecutingContext context) { //按照一定的规则生成静态文件的名称,这里是按照area+"-"+controller+"-"+action+key规则生成 string controllerName = context.RouteData.Values["controller"].ToString().ToLower(); string actionName = context.RouteData.Values["action"].ToString().ToLower(); //这里的Key默认等于id,当然我们可以配置不同的Key名称 string id = context.RouteData.Values.ContainsKey(Key) ? context.RouteData.Values[Key].ToString() : ""; if (string.IsNullOrEmpty(id) && context.HttpContext.Request.Query.ContainsKey(Key)) { id = context.HttpContext.Request.Query[Key]; } string filePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", controllerName + "-" + actionName + (string.IsNullOrEmpty(id) ? "" : ("-" + id)) + ".html"); //判断文件是否存在 if (File.Exists(filePath)) { FileInfo fileInfo = new FileInfo(filePath); TimeSpan timeSpan = DateTime.Now - fileInfo.CreationTime; if (timeSpan.TotalDays <= 1) { //如果存在,直接读取文件 using (FileStream fs = File.Open(filePath, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { //通过contentresult返回文件内容 ContentResult contentresult = new ContentResult(); contentresult.Content = sr.ReadToEnd(); contentresult.ContentType = "text/html"; context.Result = contentresult; } } } } } } }使用我们可以通过将属性设置到类或者方法上面来使用using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using cc.lisen.Models.Entity; using cc.lisen.Public.ArticleHelper; using cc.lisen.Public.MenuHelper; using Microsoft.AspNetCore.Authorization; using cc.lisen.Public.Attribute; namespace cc.lisen.Controllers { [StaticFileHandlerFilter(Key = "id")] public class ArticleController : BaseController { private readonly IArticleHelper articleHelper; public ArticleController(IArticleHelper articleHelper, IMenuHelper menuHelper) : base(menuHelper) { this.articleHelper = articleHelper; } // GET: Article public ActionResult Index() { List<Article> list = articleHelper.GetList(); return View(list); } // GET: Article/Details/5 [StaticFileHandlerFilter(Key = "id")] public ActionResult Details(string id) { Article article = articleHelper.GetArticle(id); return View(article); } // GET: Article/Create [Authorize(Roles = "admin")] public ActionResult Create() { return View(); } // POST: Article/Create [HttpPost] [ValidateAntiForgeryToken] [Authorize(Roles = "admin")] public ActionResult Create(Article article) { try { articleHelper.InsertArticle(article); return RedirectToAction(nameof(Index)); } catch { return View(); } } // GET: Article/Edit/5 [Authorize(Roles = "admin")] public ActionResult Edit(string id) { Article article = articleHelper.GetArticle(id); return View(article); } // POST: Article/Edit/5 [HttpPost] [ValidateAntiForgeryToken] [Authorize(Roles = "admin")] public ActionResult Edit(string id, Article article) { try { // TODO: Add update logic here articleHelper.EditArticle(article); return RedirectToAction(nameof(Index)); } catch { return View(); } } // GET: Article/Delete/5 [Authorize(Roles = "admin")] public ActionResult Delete(string id) { if (articleHelper.DeleteArticle(id)) { ViewBag.IsDeleted = "删除成功"; } else { ViewBag.IsDeleted = "删除失败"; } return View(); } // POST: Article/Delete/5 [HttpPost] [ValidateAntiForgeryToken] [Authorize(Roles = "admin")] public ActionResult Delete(string id, IFormCollection collection) { try { // TODO: Add delete logic here return RedirectToAction(nameof(Index)); } catch { return View(); } } } }查看结果我们查看wwroot页面,可以查看生成的html页面
2017年12月04日
1,432 阅读
0 评论
2 点赞
2017-12-03
微软官方跨平台sqlserver连接工具SQL Operations Studio
SQL Operations Studio 是一个数据管理工具,支持在 Windows, macOS 和 Linux 上与 SQL Server, Azure SQL DB 和 SQL DW 配合使用。功能亮点通过简单的 XCopy 部署,可用于 Windows, macOS 和 Linux 的跨平台数据库管理具有 Connection Dialog, Server Groups, 和 Registered Servers 功能的 SQL Server 连接管理对象资源管理器(Object Explorer)支持 schema 浏览和上下文命令执行具有高级编码功能的 T-SQL Query 编辑器,如自动建议、错误诊断、工具提示、格式化和查看定义(peek definition)具备高级数据网格的查询结果查看器支持大型结果集、导出到 JSON\CSV\Excel、查询计划和制图管理控制面板支持可定制的小部件,具有 drill-through action 的功能备份和恢复对话框,可以进行高级的自定义和远程文件系统浏览,配置的任务可以执行或变成脚本任务历史记录窗口查看当前任务执行状态、完成结果、错误消息和任务 T-SQL 脚本脚本支持为数据库对象生成 CREATE,SELECT 和 DROP 语句具有完整 Git 集成的工作空间,支持“文件内查找”以管理 T-SQL 脚本库可视数据编辑器可以直接插入行、更新和删除表现代轻量级可定义主题的 shell、用户设置、支持全屏、集成终端和众多其他功能下载地址Windows https://go.microsoft.com/fwlink/?linkid=862648macOS https://go.microsoft.com/fwlink/?linkid=862647Linux https://go.microsoft.com/fwlink/?linkid=862646
2017年12月03日
1,574 阅读
0 评论
23 点赞
2017-12-01
ckeditor上传图片去掉默认的高度宽度
在使用CKEditor插件上传图片时,插件默认会给予图片宽度高度的大小,而项目需求不需要默认图片的宽高大小样式,这就需要更改CKEditor的配置文件了。网上找了很多解决方案,都无法解决问题,唯一未测试是否可行的是加disallowedContent属性,disallowedContent属性只有在CKEditor 4.4以上的版本才有,而项目使用的是4.2版本,所以如果有使用4.4以上版本的可以尝试使用disallowedContent属性解决。4.2版本解决方法如下:打开目录ckeditor\plugins\image\dialogs中的image.js文件;搜索E.setValue(C.$.height)对应的宽度的是E.setValue(C.$.width)将其值设置为null便可以了。例如E.setValue(null)。设置成功后浏览器记得清除缓存,亲测可行。对应的CKEditor 4.7版本的代码如下:if ("true" == c.getCustomData("isReady")) { var d = a.getContentElement("info", "txtWidth"), f = a.getContentElement("info", "txtHeight"), g; b ? c = g = 0 : (g = c.$.width, c = c.$.height); d && d.setValue(g); f && f.setValue(c) }对应的将setValue的值设置为Null应该就可以了。注:CKEditor 4.7版本的修改方法未测试。有问题可留言探讨。
2017年12月01日
1,502 阅读
0 评论
2 点赞
2017-11-29
asp.net core中bootstrap-table无法获取返回的Json数据
之前在ASP.NET Core下面,通过bootstrap-table也展示过数据,当时也是在controller中直接返回了Json对象,当时没有任何问题,但是今天测试的时候,发现返回的数据不能展示了,所有的数据都变成了 -,其实就是数据有问题,但是查看返回的Json数据的时候,Json数据格式也没有任何问题。处理Json返回的数据更多调试发现,Json对象还有一个JsonSerializerSettings参数的重载函数,然后直接实例化了一个JsonSerializerSettings对象,然后返回Json就可以了,具体如下var rows = productHelper.GetProductPager(limit, offset); int total = rows.Count(); JsonSerializerSettings settings = new JsonSerializerSettings(); //settings.MaxDepth = 50; //settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //设置不处理循环引用 //转成Json格式 return Json(new { total = total, rows = rows }, settings); //return Json(new { total = total, rows = rows });
2017年11月29日
1,534 阅读
0 评论
22 点赞
1
...
42
43
44
...
52