LayUI在WebForm中的实现
作者:朱尚 / 日期:2020-12-16 / 分类:前端框架 / 浏览:457

现今的前端框架繁多,有例如Vue,bootstrap,react,angular等等,都是功能强大又易于开发的,最近由于要做一个独立的小管理系统,在搜索框架时找到了一个可模块化的前端框架:LayUI


LayUI官方网站: https://www.layui.com/ ,经典模块化前端框架,由职业前端倾情打造,面向全层次的前后端开发者,低门槛开箱即用的前端 UI 解决方案


当然,可模块化开发的前端框架也很多,例如:EasyUI,ElementUI,众多的JS插件等等,最后用这个LayUI来做呢,最重要的一点就是对后端开发人员来说太方便了,前端完全由JS库集成,

只需要按照文档规范编写代码,提供数据接口,剩下的事就不用我们操心了。


此次我选用LayUI里的数据表格这个模块:

layui.use('table', function () {
    var table = layui.table;
    var userid = "";
    //第一个实例
    table.render({
        elem: '#demo'
        , skin: 'line' //行边框风格
        , height: 312
        , url: '/Default.aspx/showTable_ms' //数据接口
        , method: 'post'
        , contentType: 'application/json'
        , page: true //开启分页
        , cols: [[ //表头
            { field: 'ID', title: 'ID', fixed: 'left', align: 'center' }
            , { field: 'Title', title: '编号', align: 'center' }
            , {
                field: 'UserId', title: '', templet: function (d) {
                    return "";
                }
            }
            , { field: '', title: '' }
            , { field: '', title: '' }
            , { field: '', title: '' }
            , { title: '', fixed: 'right', align: 'center' }
            , {
                title: '付款', fixed: 'right', align: 'center', templet: function (d) {
                    if (d.States == "0") {
                        return '<span><a style="color: #c00;" href="">审核中</a></span>';
                    } else if (d.States == "1") {
                       
                        return '<span><a style="color: #FF5722;" href="/pay/' + d.Title + "_" + d.ID + '">去付款</a></span>';
                    }
                    else if (d.States == "2") {
                        return '<span><a style="color: #009688;" href="">已付款</a></span>';
                    }
                    else if (d.States == "3") {
                        return '<span><a href="">已结束</a></span>';
                    }
                }
            }
            , {
                field: 'States', title: '状态', fixed: 'right', align: 'center', templet: function (d) {
                    if (d.States == "0") {
                        return '<span style="color: #c00;">审核中</span>';
                    }
                    else if (d.States == "1") {
                        return '<span style="color: #FF5722;">待注册</span>';
                    }
                    else if (d.States == "2") {
                        return '<span style="color: #009688;">注册成功</span>';
                    }
                    else if (d.States == "3") {
                        return '<span>已结束</span>';
                    }
                }
            }
            , { title: '操作', fixed: 'right', width: 150, align: 'center', toolbar: '#barDemo' }
        ]]
        , parseData: function (res) { //res 即为原始返回的数据
            console.log(res.d);
            var res1 = strToJson(res.d);
            return {
                "code": res1.code, //解析接口状态
                "msg": res1.msg, //解析提示文本
                "count": res1.count, //解析数据长度
                "data": res1.data //解析数据列表
            };

        }
    });
    //监听工具条 
    table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
        var data = obj.data; //获得当前行数据
        var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
        var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)

        if (layEvent === 'detail') { //查看
            //do somehing
            if (data.States == "0") {
                layer.msg("请耐心等待审核");
            }
            else if (data.States == "1") {
                layer.open({
                    title: ['操作'],
                    type: 2,
                    area: ['400px', '300px'],
                    content: '/Check/tan1.aspx?id=' + data.ID + '&uid=' + data.UserId,
                    yes: function (index) { }
                });
            }
            //layer.alert("查看");
        }
        //else if (layEvent === 'del') { //删除
        //    layer.confirm('真的删除行么', function (index) {
        //        obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
        //        layer.close(index);
        //        //向服务端发送删除指令
        //    });
        //}
        //else if (layEvent === 'edit') { //编辑
        //    //do something

        //    //同步更新缓存对应的值
        //    obj.update({
        //        username: '123'
        //        , title: 'xxx'
        //    });
        //}
        //else if (layEvent === 'LAYTABLE_TIPS') {
        //    layer.alert('Hi,头部工具栏扩展的右侧图标。');
        //}
    });

});
function strToJson(str) {
    var json = eval('(' + str + ')');
    return json;
}

后端接口我把之前使用的 当前aspx中的ajax访问当前.cs里的方法 结合了一下:

[WebMethod]
    public static string showTable_ms()
    {
        BasicPage bp = new BasicPage();
        string strUsername3 = Basic.Engine.CookieDo.GetCookie("webUserName", "str_key");
        string UserID = "";
        SqlDataReader myreader = bp.getRead("select * from TbUser where UserState='0' and  UserName='" + strUsername3 + "' ");
        if (myreader.Read())
        {
            UserID = myreader["userid"].ToString();
        }
        myreader.Close();

        DataTable dtblNews = new DataTable();
        int intNews;

        dtblNews = bp.SelectDataBase("tbuser_ms", "select * from tbuser_ms where userid=" + UserID + " order by id desc").Tables[0];
        intNews = dtblNews.Rows.Count;

        string json = string.Empty;
        try
        {
            if (dtblNews == null || dtblNews.Rows.Count == 0)
            {
                return "";
            }
            json = "{";
            json += "\"code\":0,\"msg\":\"\",\"count\":" + intNews + ",";
            json += "\"data\":[";
            for (int i = 0; i < dtblNews.Rows.Count; i++)
            {
                json += "{";
                for (int j = 0; j < dtblNews.Columns.Count; j++)
                {
                    json += "\"" + dtblNews.Columns[j].ColumnName + "\":\"" + dtblNews.Rows[i][j].ToString() + "\"";
                    if (j != dtblNews.Columns.Count - 1)
                    {
                        json += ",";
                    }
                }
                json += "}";
                if (i != dtblNews.Rows.Count - 1)
                {
                    json += ",";
                }
            }
            json += "]";
            json += "}";
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

        return json;
    }

接口返回的必须是JSON格式的,在使用此方法后,需在前端把 return的值重新解析成JSON,否则只能是undefined,简直大坑

当然,嫌麻烦的朋友,可以直接用其他空页面Response.Write 输出,此方法可直接获取到。


最后,个人用下来的感觉是不错的,即拿即用,简直是搬砖利器,如果对自定义有更高的要求,还是推荐使用主流框架。

毕竟LayUI虽说高度集成,但是限制也是在这了:

1、很难将layui整合到现有的项目中,当前项目已经开始使用了其他框架的话,会与LayUI发生兼容问题

2、如果一个全新的项目, 从开始时就按照layui的标准来开发, 那么当你需要在项目中引入其他库时, 必须进行手动的包装, 

     使其能够被layui的模块加载器加载, 具体的例子可以参见layui中jQuery是如何变成layui模块的.


只要克服这两个困难,或者完全没有这些顾虑的小伙伴,快用起来吧。

上一篇:没有了
下一篇:没有了
本文标签: LayUI WebMethod
本文链接:http://www.banzhuan.net/detail/363