博客 (844)

对于具体化的查询结果,不支持该方法。

This method is not supported against a materialized query result.

可能对嵌套查询的子结果集进行 Count() 等操作,可以在内部 select 外套一层 .ToList(),我在万条记录中测试不影响执行时间,但没有具体分析生成的 SQL 语句和执行跟踪。

xoyozo 8 年前
5,439

HTML5 Sortable 是一款使用原生 HTML5 drag 和 drop API 来对列表或网格进行排序的 jQuery 插件。


下载和使用:官网


步骤:

1、给 <ul /> 添加 sortable 样式类

2、引入 jquery.sortable.js

3、$('.sortable').sortable();


通过绑定 sortupdate 事件来获取排序后的 DOM 位置,示例:

$('.sortable').sortable().bind('sortupdate', function (event, ui) {
    var item = $(ui.item[0]);
    var prev = item.prev();

    $.post(window.location.pathname, {
        xdo: 'fn_sort',
        cid: item.data('cid'),
        prev: prev.data('cid') // 可能为 undefined
    }, function (json) {
        if (json.result.success) {
        } else {
            toastr['error'](json.result.info);
        }
    }, 'json');
});


xoyozo 8 年前
6,165

以静态方法为例:

async_await.png

实际案例:在现有代码中通过async/await实现并行

早前的一篇文章


注意事项:

  • 异步编程中不能使用 Session,这点跟定时器类似。

  • 不要在调用无返回值的异步方法前加 await,否则会导致无限等待。

xoyozo 8 年前
7,143

AspNetPager 官网给出了示例

即在引入 bootstrap.css 后添加以下样式:

.pagination a[disabled] { color: #777; cursor: not-allowed; background-color: #fff; border-color: #ddd; }
.pagination span.active { z-index: 2; color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7; }

给 AspNetPager 控件添加以下属性:

CssClass="pagination" LayoutType="Ul" PagingButtonLayoutType="UnorderedList" PagingButtonSpacing="0" CurrentPageButtonClass="active"

然而,当页数超过 30 时(ShowBoxThreshold 的默认值)会显示 PageIndexBox,可以使之不显示:

ShowPageIndexBox="Never"

或者添加以下样式修饰它:

.pagination input[type=text] { width: 50px !important; display: inline-block; text-align:center; }
.pagination input[type=button] { margin-top: -3px; margin-left: 5px; }

并增加属性:

PageIndexBoxClass="form-control" SubmitButtonClass="btn btn-primary"

另外,我还添加了以下属性来适应我的项目:

UrlPaging="true" AlwaysShow="True" AlwaysShowFirstLastPageNumber="true" ShowFirstLast="false" NumericButtonCount="3"
xoyozo 8 年前
5,914

网站的“防跨站攻击”默认是开启的,对应网站根目录下存在 .user.ini 文件可阻止该网站程序读写网站目录外的文件或目录


通过 FTP 上传或通过 PHP 创建的文件(夹)的用户(组)都是 www:www,目录权限 755,文件权限 644


PHP 不需要“执行”权限,因为这个“执行”权限是针对 sh 的


因此 PHP 在该站任何位置具有写入权限


理想的权限控制是:pure-ftp 使用另外的用户(组),譬如 ftp:ftp


这样使用 www:www 的 PHP 就无法随意创建文件,只能在开放了“公共权限”中的“写入”权限的目录中创建。


查看系统用户组:cat /etc/group

查看系统用户:cut -d : -f 1 /etc/passwd


查看 pure-ftp 帮助:

/www/server/pure-ftpd/bin/pure-pw --help


修改 FTP 用户的所有者和组:

/www/server/pure-ftpd/bin/pure-pw usermod FTP用户名 -u 所有者 -g 组


重启 pure-ftp


上述命令经简单测试并没有更改 FTP 用户的所有者和组……



退而求其次的做法是通过 SSH 用 root 来上传网站程序代码,并开放上传目录的“写入”权限


还有重要的一点,在网站的配置文件中禁止这些有“写入”权限的目录中的 PHP 运行权限!(参:在 CentOS (Linux) 中设置目录写入权限,并禁止执行 php


xoyozo 8 年前
7,756

官方 Demo

WeUI:https://weui.io/

weui.js:https://weui.io/weui.js/


开发文档

WeUI:https://github.com/Tencent/weui/wiki

weui.js:https://github.com/Tencent/weui.js/blob/master/docs/README.md

WeUI for 小程序:https://github.com/Tencent/weui-wxss


引入

① <head /> 中加入:

<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0" />

② 引用样式:(请更改地址中的版本号,参开发文档

<link href="https://res.wx.qq.com/t/wx_fed/weui-source/res/2.5.16/weui.min.css" rel="stylesheet" />

③ (可选)引用脚本:(请将下方链接中的版本号替换为最新)

<script src="https://res.wx.qq.com/t/wx_fed/weui.js/res/1.2.17/weui.min.js"></script>


经验

  • 搜索框的 <form /> 中不加 action 则键盘中显示灰色“换行”键,加入 action 则键盘中显示蓝色“搜索”键

xoyozo 8 年前
8,513

502.5.png

解决方法:安装最新的 .NET Core runtime 即可:https://www.microsoft.com/net/download/core#/runtime

(Windows Server 上选择 Windows Server Hosting (x64 & x86))

xoyozo 8 年前
5,737
  1. 在 NuGet 中安装 Microsoft.AspNetCore.Session 和 Newtonsoft.Json

  2. 打开 Startup.cs,在 ConfigureServices 方法中加入(视情况配置相关属性)

    services.AddSession(options =>
    {
        // 设置了一个较短的时间,方便测试
        options.IdleTimeout = TimeSpan.FromSeconds(10);
        options.CookieHttpOnly = true;
    });
  3. 在 Configure 方法中加入

    app.UseSession();
  4. 添加 Extensions 文件夹并添加类 SessionExtensions.cs

    using Microsoft.AspNetCore.Http;
    using Newtonsoft.Json;
    
    public static class SessionExtensions
    {
        public static void Set<T>(this ISession session, string key, T value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }
    
        public static T Get<T>(this ISession session, string key)
        {
            var value = session.GetString(key);
            return value == null ? default(T) :
                                  JsonConvert.DeserializeObject<T>(value);
        }
    }
  5. 使用方法

    HttpContext.Session.Set("abc", 123);
    var v1 = HttpContext.Session.Get<int>("abc");
    HttpContext.Session.Remove("abc");
    var v2 = HttpContext.Session.Get<int>("abc");
    // v1 = 123, v2 = 0
xoyozo 8 年前
5,324

TIM图片20170522112717.png

问题出在使用 EF 时,foreach 了一个 DbSet<T>,加上 .ToList() 可以搞定。 

xoyozo 8 年前
5,174