开源 C# .net mvc 开发(七)动态图片、动态表格和json数据生成

 文章的目的为了记录.net mvc学习的经历。本职为嵌入式软件开发,公司安排开发文件系统,临时进行学习开发,系统上线3年未出没有大问题。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 

相关链接:

开源 C# .net mvc 开发(一)WEB搭建_c#部署web程序-优快云博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-优快云博客

开源 C# .net mvc 开发(三)WEB内外网访问-优快云博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示-优快云博客

开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-优快云博客

开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程-优快云博客

开源 C# .net mvc 开发(七)动态图片、动态表格和json数据生成-优快云博客

开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用-优快云博客

 推荐链接:

开源 java android app 开发(一)开发环境的搭建-优快云博客

开源 java android app 开发(二)工程文件结构-优快云博客

开源 java android app 开发(三)GUI界面布局和常用组件-优快云博客

开源 java android app 开发(四)GUI界面重要组件-优快云博客

开源 java android app 开发(五)文件和数据库存储-优快云博客

开源 java android app 开发(六)多媒体使用-优快云博客

开源 java android app 开发(七)通讯之Tcp和Http-优快云博客

开源 java android app 开发(八)通讯之Mqtt和Ble-优快云博客

开源 java android app 开发(九)后台之线程和服务-优快云博客

开源 java android app 开发(十)广播机制-优快云博客

开源 java android app 开发(十一)调试、发布-优快云博客

开源 java android app 开发(十二)封库.aar-优快云博客

开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作-优快云博客

本章的内容:在.net mvc 开发需要涉及到的特殊技巧,动态的图片生成,动态的表格生成,以及json数据格式的生成。

一、动态的图片生成,在登录页面,除了用户名和密码,经常生成动态的图片,必须真人查看后填入,这样防止了网络爬虫不停输入密码来破解。

1.1  Login.cshtml的代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>SCloudD</title>
    <link rel="stylesheet" type="text/css" href="../../Scripts/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="../../Scripts/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="../demo.css">
    <script type="text/javascript" src="../../Scripts/jquery.min.js"></script>
    <script type="text/javascript" src="../../Scripts/jquery.easyui.min.js"></script>
</head>
<body>

    @using (Html.BeginForm("Login", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))

    {
        <center>

            @using (Html.BeginForm("Login", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))

            {

                <div class="easyui-panel" title="系统登录" style="width:100%;max-width:400px;padding:30px 60px; right: inherit;">

                    <div style="margin-bottom:10px">
                        <input class="easyui-textbox" name="name" label="用户名:" labelPosition="left" prompt="请输入用户名" style="width:250px;">
                    </div>
                    <div style="margin-bottom:10px">
                        <input class="easyui-passwordbox" name="pwd" label="密码:" labelPosition="left" prompt="请输入密码" iconWidth="28" style="width:250px;">
                    </div>
                    <div style="margin-bottom:10px">
                        <input type="text" name="checkcode" label="验证码:" labelPosition="left" class="easyui-textbox" prompt="验证码" />
                        <img style="position:relative;top:10px;" src="/Home/GetImg" width="80" height="30" id="validCodeImg" onclick="Refresh();" />
                    </div>

                    <div style="margin-bottom:10px;">
                        <button type="submit" class="easyui-linkbutton" style="width:250px;">登录</button>
                    </div>


                </div>

            }

            <div style="margin:20px 0;">@ViewData["LoginErr"]</div>
        </center>
    }

</body>
</html>
<script type="text/javascript">
    
    function Refresh()
    {
        window.location = '/Home/Login';
    }
    
</script>

1.2  home控制器中的GetImg函数代码,生成含有随机数字字母的图片,在cshtml中显示。

 public ActionResult GetImg() 
        {
            string[] strArr = { "0", "1" , "2", "3", "4", "5", "6", "7", "8", "9",
            "a", "b" , "c", "d", "e", "f", "g", "h","i","j",
            "k" , "l", "m", "n", "o", "p", "q", "r", "s","t", 
            "u" , "v", "w", "x", "y", "z"
            };
            Random random = new Random();
            string strTmp = strArr[random.Next(0, 9)] + strArr[random.Next(10, 35)] +
                            strArr[random.Next(0, 9)] + strArr[random.Next(10, 35)] ;
            Session["checkcode"] = strTmp;
            Bitmap bmp = new Bitmap(80, 35); 
            Graphics g = Graphics.FromImage(bmp); 
            g.Clear(Color.White); 
            g.FillRectangle(Brushes.CadetBlue, 2, 2, 65, 31); 
            g.DrawString(strTmp, new Font("黑体", 15f), Brushes.White, new PointF(5f, 5f)); 
            MemoryStream ms = new MemoryStream(); 
            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
            g.Dispose(); bmp.Dispose(); 
            return File(ms.ToArray(), "image/jpeg"); 
        }

1.3  控制器中的Login代码,查找用户名,密码,和图片进行比较,失败则返回登录页面。



        [HttpPost]
        public ActionResult Login(FormCollection formcollection)
        {
            try
            {
                Session["User"] = null;
                Session["LoginName"] = null;
                Session["Right"] = null;
                Session["PermissionInt"] = 0;

                string LoginName = formcollection["name"];
                string Password = formcollection["pwd"];
                string strCheckCode = formcollection["checkcode"];
                if (strCheckCode != Session["checkcode"].ToString())
                {
                    ViewData["LoginErr"] = "登录失败!校验码错误";
                    return PartialView();
                }

                var newDtList = from d in db.User where d.UserName == LoginName && d.Password == Password select d;
                string strRight = "", strLoginName = "";
                bool bFlg = false;
                int uLId = 0;



                if (newDtList != null)//(test != null && password == test.Password)
                {
                    strRight = item.Permission.Replace(" ", "");
                    strLoginName = item.Name.Replace(" ", "");
                    uLId = item.Id;
                    Session["DisplayCnt"] = 10;
                    Session["User"] = strLoginName;
                    Session["ListSiwitch"] = "全部";
                    Session["UserId"] = uLId;
                    Session["KgListSiwitch"] = "全部";

                    ViewBag.LoginState = "登录成功";

                    return RedirectToAction("Index", "Home");

                }
                else
                {
                    ViewData["LoginErr"] = "登录失败!用户名或密码错误";
                    return PartialView();
                }
            }
            catch (Exception ex)
            {
                Session["Err"] = ex;
                return PartialView();
            }
        }

1.4  显示效果

二、  动态表格

2.1  表格函数,通过 javascript脚本,用函数来生成表格进行显示。

 <script type="text/javascript">

        function CreateTable(str)
        {
            var strArr = str.split(",");
            var tab = '<table class="printTB detailTb gua-detail-table" cellspacing="0" cellpadding="0">'
            tab += '<tr>'
            tab += "<th>" + "序号" + "</th>"
            tab += "<th>" + "时间" + "</th>"
            tab += "<th>" + "产品型号" + "</th>"
            tab += "<th>" + "单位" + "</th>"
            tab += "<th>" + "价格" + "</th>"
            tab += "<th>" + "备注" + "</th>"
            tab += '</tr>'
            for (var i = 1; i < strArr.length; i++)
            {
                var strCol = strArr[i].split(";");
                tab += '<tr>'
                tab += "<td>" + i + "</td>"
                for (var j = 0; j < 5; j++) {
//                    tab += "<td style='background:green'>" + i + j + "</td>"
                    tab += "<td>" + strCol[j] + "</td>"
                }
                tab += '</tr>'
            }
            tab += '</table>';
            TableDiv.innerHTML = tab;

        }
</script>

2.2  显示效果

三、动态生成json数据格式

3.1  javascripit 脚本,页面装载时,发送ajax命令,读取PrjProcess的getchips函数,返回的json数据,直接更新到combobox中。

 <script type="text/javascript">


    $.ajax({
        url: "/PrjProcesses/getChips?str=" + chip,
        type: "get",
        data: {},
        success: function (res) {
            $("#" + chip.id).combobox({ data: res.Soc });
            
        }, dataType: "json"
    });


</script>

3.2  PrjProcess控制器中进行json的数据组包

        public class PrjAllChips
        {
            public List<User> En = new List<User>();
            public List<PrjChip> Soc = new List<PrjChip>();
        }

        public JsonResult getChips(string str)
        {

            PrjAllChips myList = new PrjAllChips();


            var tmp0 = db.PrjChip.Where(r=>r.UseTo.Contains(str));
            foreach (var item in tmp0)
            {
                myList.Soc.Add(new PrjChip { Code = item.Code });
            }

            var tmp1 = db.User;

            foreach (var item in tmp1)
            {
                myList.En.Add(new User { Name = item.Name });
            }

            return Json(myList, JsonRequestBehavior.AllowGet);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值