整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

获取记录信息,页面回显,修改数据,提交更新

一、DAL数据访问层代码

1、获取实体对象

/// <summary>
       /// 得到一个对象实体
       /// </summary>
       public Model.Banqi GetModel(int id)
      {
           StringBuilder strSql = new StringBuilder();
           strSql.Append("select top 1 * from banqi");
           strSql.Append(" where id=@id");
           SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4)};
           parameters[0].Value = id;
           Model.Banqi model = new Model.Banqi();
           DataTable dt = new SqlHelper().ExecuteQuery(strSql.ToString(), parameters, CommandType.Text);

           if (dt.Rows.Count > 0)
          {
               if (dt.Rows[0]["id"].ToString() != "")  //这个判断可以省略,只判断允许为空的字段
              {
                   model.id = int.Parse(dt.Rows[0]["id"].ToString());
              }
                 
               model.bqid = dt.Rows[0]["bqid"].ToString();
               model.xxdw = dt.Rows[0]["xxdw"].ToString();
               model.bqmc = dt.Rows[0]["bqmc"].ToString();
               model.zygz = dt.Rows[0]["zygz"].ToString();
               model.pxdd = dt.Rows[0]["pxdd"].ToString();
               model.skjs = dt.Rows[0]["skjs"].ToString();
               model.pxks = DateTime.Parse(dt.Rows[0]["pxks"].ToString());
               model.pxjs = DateTime.Parse(dt.Rows[0]["pxjs"].ToString());
               model.bqrs = int.Parse(dt.Rows[0]["bqrs"].ToString());
               return model;
          }
           else
          {
               return null;
          }
      }

2、更新数据

//更新一条记录
       public bool Update(Model.Banqi model) {
           StringBuilder strSql = new StringBuilder();
           strSql.Append("update banqi set ");
           strSql.Append("bqid=@bqid,");
           strSql.Append("xxdw=@xxdw,");
           strSql.Append("bqmc=@bqmc,");
           strSql.Append("zygz=@zygz,");
           strSql.Append("pxdd=@pxdd,");
           strSql.Append("skjs=@skjs,");
           strSql.Append("pxks=@pxks,");
           strSql.Append("pxjs=@pxjs,");
           strSql.Append("update_time=@update_time");
           strSql.Append(" where id=@id");
           SqlParameter[] parameters = {
            new SqlParameter("@bqid", SqlDbType.NVarChar,50),
                               new SqlParameter("@xxdw", SqlDbType.NVarChar,50),
                               new SqlParameter("@bqmc", SqlDbType.NVarChar,50),
                               new SqlParameter("@zygz", SqlDbType.NVarChar,50),
                               new SqlParameter("@pxdd", SqlDbType.NVarChar,50),
                               new SqlParameter("@skjs", SqlDbType.NVarChar,50),
                               new SqlParameter("@pxks", SqlDbType.DateTime),
                               new SqlParameter("@pxjs", SqlDbType.DateTime),
                               new SqlParameter("@bqrs", SqlDbType.TinyInt),
                               new SqlParameter("@update_time", SqlDbType.DateTime),
                                new SqlParameter("@id", SqlDbType.Int,4)
                                      };
           parameters[0].Value = model.bqid;
           parameters[1].Value = model.xxdw;
           parameters[2].Value = model.bqmc;
           parameters[3].Value = model.zygz;
           parameters[4].Value = model.pxdd;
           parameters[5].Value = model.skjs;
           parameters[6].Value = model.pxks;
           parameters[7].Value = model.pxjs;
           parameters[8].Value = model.bqrs;
           parameters[9].Value = model.update_time;
           parameters[10].Value = model.id;
           int res = new SqlHelper().ExecuteNonQuery(strSql.ToString(), parameters, CommandType.Text);
           if (res>=1)  //更新一条就是=1
          {
               return true;
          }
           else
          {
               return false;
          }

           
      }

二、前台页面代码,含数据验证

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="banqi_edit.aspx.cs" Inherits="Peixun.Web.banqi_edit" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   <title>班期修改</title>
    <meta name="renderer" content="webkit">
   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
   <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
   <link rel="stylesheet" href="./css/font.css">
   <link rel="stylesheet" href="./css/xadmin.css" />
   <script src="./lib/layui/layui.js" charset="utf-8"></script>
   <script type="text/javascript" src="./js/xadmin.js"></script>
</head>
<body>
  <div class="layui-fluid">
       <div class="layui-row">
           <form id="form" class="layui-form" runat="server">
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>班期ID
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtBqid"  lay-verify="title" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入班期ID
               </div>
           </div>
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>学校单位
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtXxdw" lay-verify="required" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入培训机构院校
               </div>
           </div>
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>班期名称
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtBqmc" lay-verify="required" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入班期名称
               </div>
           </div>
           <!--项目开始-->
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>职业工种
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtZygz" lay-verify="required" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入职业工种
               </div>
           </div>
           <!--项目结束-->
           <!--项目开始-->
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>培训地点
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtPxdd"  lay-verify="required" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入培训地点
               </div>
           </div>
           <!--项目结束-->
           <!--项目开始-->
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>授课教师
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtSkjs" lay-verify="required" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入授课教师
               </div>
           </div>
           <!--项目结束-->
           <!--项目开始-->
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>培训开始
               </label>
               <div class="layui-input-inline layui-show-xs-block">
                   <asp:TextBox ID="txtPxks"  runat="server" placeholder="培训开始日期" lay-verify="date"
                       autocomplete="off" CssClass="layui-input"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入培训开始日期
               </div>
           </div>
           <!--项目结束-->
           <!--项目开始-->
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>培训结束
               </label>
               <div class="layui-input-inline">
                   <asp:TextBox ID="txtPxjs"  autocomplete="off" class="layui-input" lay-verify="date"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入培训结束日期
               </div>
           </div>
           <!--项目结束-->
           <!--项目开始-->
           <div class="layui-form-item">
               <label for="username" class="layui-form-label">
                   <span class="x-red">*</span>班期人数
               </label>
               <div class="layui-input-inline ">
                   <asp:TextBox ID="txtPxrs"  lay-verify="number|Ndouble" autocomplete="off" class="layui-input"
                       runat="server"></asp:TextBox>
               </div>
               <div class="layui-form-mid layui-word-aux">
                   <span class="x-red">*</span>请输入培训人数
               </div>
           </div>
           <!--项目结束-->
           <!--按钮开始-->
           <div class="layui-form-item">
               <label for="L_repass" class="layui-form-label">
               </label>
               <asp:Button ID="Button1" runat="server" lay-submit="" lay-filter="add" Text="保存"
                   CssClass="layui-btn" OnClick="Button1_Click" />
           </div>
           <!--按钮结束-->
           </form>
       </div>
   </div>
   <script>        layui.use(['laydate', 'form'],
       function () {
           var laydate = layui.laydate;
           var form = layui.form

           //自定义验证规则
           form.verify({
               title: function (value, item) {
                   if (value.length < 5) {
                       return '标题至少得5个字符啊';
                  }
              }
              , Ndouble: [
             /^[1-9]\d*$/
            , '只能输入整数哦'
                  ]

              , contact: function (value) {
                   if (value.length < 4) {
                       return '内容请输入至少4个字符';
                  }
              }
              , phone: [/^1[3|4|5|7|8]\d{9}$/, '手机必须11位,只能是数字!']
              , email: [/^[a-z0-9._%-]+@([a-z0-9-]+\.)+[a-z]{2,4}$|^1[3|4|5|7|8]\d{9}$/, '邮箱格式不对']
          });

           //监听提交
           form.on('submit(add)', function (data) {
               //ajax
               //console.log(data.elem) //被执行事件的元素DOM对象,一般为button对象
               //console.log(data.form) //被执行提交的form对象,一般在存在form标签时才会返回
               console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value};获取单个值data.field["title"]
               //sreturn false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
          });

           //执行一个laydate实例
           laydate.render({
               elem: '#txtPxks',    //指定元素
               btns: ['confirm'],
               theme: 'grid',
               trigger: 'click'    //解决日期选择一闪而过问题
          });

           //执行一个laydate实例
           laydate.render({
               elem: '#txtPxjs',     //指定元素
               trigger: 'click'    //解决日期选择一闪而过问题
          });
      });

   </script>
</body>
</html>

三、后台代码

1、根据传来的参数id,获取实体对象,将值赋予前台控件文本属性。

2、通过前台JS验证,修改数据后保存。更新成功后,关闭弹出页,刷新父窗口。

任务描述

1.1 输入关键字,通过百度搜索来自指定网站的网页,如凤凰网。

1.2 下拉菜单和输入框组合到一起,即网站地址既可以手动输入,也可以通过下拉菜单选择后自动输入。

2 HTML+CSS+JS代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<script language="javascript" type="text/javascript">

function baiduSearch() {

window.open("http://www.baidu.com/baidu?word=" + formmain.kw.value + "&tn=bds&cl=3&ct=2097152&si=" + formmain.sitesearch.value + "&s=on");

//如果用汉语搜索,关键字最好是重新编码:encodeToGb2312(formmain.kw.value)

}

</script>

<style>

.siteselect{

width:168px;

margin-left:-145px;

margin-left:-146px;

}

.iesitesearch{

font-size:14px;

height:16px;

width:145px;

margin-top:0px;

position:absolute;

left:5px;

}

</style>

<title>站内搜索</title>

</head>

<body>

<form id=formmain onsubmit="return checktype(this); search()" name="f" action=JavaScript:>

关键字:<input type="text" size=35 name="wd" id="kw" maxlength="100" title="输入”搜索词“,在下面区域单击某一按钮,即开始搜索!" />&nbsp;网站地址:

<span style="position:relative;">

<span style="margin-left:150px;overflow:hidden;">

<select class="siteselect" onchange="this.parentNode.nextSibling.value=this.value">

<option value="sohu.com">搜狐</option>

<option value="sina.com.cn">新浪</option>

<option value="163.com">网易</option>

<option value="qq.com">腾讯</option>

<option value="ifeng.com">凤凰网</option>

</select>

</span><input id="sitesearch" name="sitesearch" class="iesitesearch" title="在前面输入框中输入“搜索词“后,在此处可输入网址(如sina.com.cn,前面不需要http://www.)或选择某一特定网站,然后单击“谷歌”或“百度”即可开始定向搜索!";>

<!--</span><input...的内容必须写成一行,否则下拉菜单中选择的内容无法显示到输入框-->

</span>

<input name="btnG3" type="button" value="百度" onclick="baiduSearch();" class="sitebai" />

</form>

</body>

</html>

搜索后的显示页面:

[dependencies]
tokio = { version = "1", features = ["full"] }
lettre = { version = "0.10.4", default-features = false, features = ["smtp-transport", "tokio1-rustls-tls", "hostname", "builder"] }
rusoto_core = { version = "0.48", default-features = false, features = ["rustls"] }
rusoto_ses = { version = "0.48", default-features = false, features = ["rustls"] }
base64 = "0.21"
serde = "1.0"
anyhow = "1.0"
tera = { version = "1", default-features = false }

rc\main.rs

use anyhow::Error;
use lettre::{
    transport::smtp::authentication::Credentials, AsyncSmtpTransport, Message, Tokio1Executor,
};
use rusoto_ses::SesClient;

mod ses;
mod smtp;
mod template;

#[tokio::main]
async fn main() -> Result<(), Error> {
    // email data
    let from = "evil@hacker.com".to_string();
    let to = "credule@kerkour.com".to_string();
    let subject = "".to_string();
    let title = subject.clone();
    let content = "".to_string();

    // template things
    let mut templates = tera::Tera::default();
    // don't escape input as it's provided by us
    templates.autoescape_on(Vec::new());
    templates.add_raw_template("email", template::EMAIL_TEMPLATE)?;

    let email_data = tera::Context::from_serialize(template::EmailData { title, content })?;
    let html = templates.render("email", &email_data)?;

    let email = Message::builder()
        .from(from.parse()?)
        .to(to.parse()?)
        .subject(subject)
        .body(html.to_string())?;

    // Using SMTP
    let smtp_credentials =
        Credentials::new("smtp_username".to_string(), "smtp_password".to_string());

    let mailer = AsyncSmtpTransport::<Tokio1Executor>::relay("smtp.email.com")?
        .credentials(smtp_credentials)
        .build();

    smtp::send_email(&mailer, email.clone()).await?;

    // or using SES
    // load credentials from env
    let ses_client = SesClient::new(rusoto_core::Region::UsEast1);
    ses::send_email(&ses_client, email).await?;

    Ok(())
}

src\ses.rs

use lettre::Message;
use rusoto_ses::{RawMessage, SendRawEmailRequest, Ses, SesClient};
use base64::{Engine as _, engine:: general_purpose};

pub async fn send_email(ses_client: &SesClient, email: Message) -> Result<(), anyhow::Error> {
    let raw_email = email.formatted();

    let ses_request = SendRawEmailRequest {
        raw_message: RawMessage {
            //data: base64::encode(raw_email).into(),
            data: general_purpose::STANDARD.encode(raw_email).into(),
        },
        ..Default::default()
    };

    ses_client.send_raw_email(ses_request).await?;

    Ok(())
}

src\smtp.rs

use lettre::{AsyncSmtpTransport, AsyncTransport, Message, Tokio1Executor};

pub async fn send_email(
    mailer: &AsyncSmtpTransport<Tokio1Executor>,
    email: Message,
) -> Result<(), anyhow::Error> {
    mailer.send(email).await?;

    Ok(())
}

src\template.rs