项目需要,开发个asp.net的工作流系统,自己负责了个网页打印、网站登录的模块。
A:网站登录模块比较简单,不过在项目中实现代码不能像以前那般随意了,在数据库连接查询部分我增加了异常捕获代码(能增加代码的安全性和健壮性)。我主要登录验证思路如下:1,获取用户输入的账户名和密码;2,根据账户名访问数据库,返回对应账户的密码;3,密码匹配,并给出登录结果(成功则进入主页,失败提示并保持登录界面)。
过程中,异常捕获模块由于是第一次使用,对于错误信息的处理经验不足,最后决定采用windows form下的弹出窗提示异常错误信息,由于默认类的名称空间中没有相应的引用,需要自己独立添加引用system.windows.form。右键单击解决方案下的自己工程下的引用,点击添加引用。或者在project菜单下找到添加引用。异常处理部分代码如下:
public string sql_select_for_pwd(string strSQL)
{
try
{
...
}
catch (Exception e)
{
ErrorMessage = e.Message; //错误信息的捕获
System.Windows.Forms.MessageBox.Show("数据库匹配密码失败:" + ErrorMessage); //需要添加引用system.windows.form
return null;
}
finally
{
...
}
return null;
}
另外自己在查找数据库中密码时也思考了一段时间,密码匹配需要取出数据库中特定列的数据,在网上有查到两种方法,一种是采用dataset,将数据库中的内容映射到内存中,使用dataAdapter与数据池交互,因为不太熟悉而且显得复杂,所以我采用了第二种方法:Reader(),上次我采用这个方法计算数据库中的总记录数,现在我用它查找特定列的值,代码如下:
ConnectMysql();...
mycommand = myconnection.CreateCommand();
mycommand.CommandText = strSQL;
MySqlDataReader read = mycommand.ExecuteReader();
while (read.Read())
{
pwd = (string)read["Password"];
}
return pwd;
...
public string logintestPWD(string username)
{
DBdata db = new DBdata();
string str = string.Format("select *from useradmin where userName='{0}'",username);
pwd = db.sql_select_for_pwd(str);
return pwd;
}
然后可以进行登录了,登录控件我使用了验证控件requiredfieldvalidator,由于与vs2013的.net4.5存在兼容性问题,需要更改web.config的配置,我增加了如下一段代码:
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
现在我的登录模块基本要点总结完毕。下面我总结一下我使用的web打印方法。
B:web打印(webbrowser/webprint/ie)实现, 在网上查到有很多第三方控件或称组件什么的,我还认识不深刻,下载下来后是个.cab的数字签名相关的包,里面有.dll和.ocx文件等,我不知道怎么使用到项目工程中,而且编码是在aspx前台做html的编码,我对html没有过多的接触,所以卡在了如何使用第三方控件开发一个网页打印的功能按钮上,早上上班发现了用ie里面的打印组件还是更容易一点,虽然只是完成了打印功能,没有用到特别好用的技术,也没有考虑用户体验,不过对于刚踏入公司的我来说,完成功能即为所学。
在添加打印控件时,我没有用到第三方的控件,而是直接在aspx的前台插入了部分html代码,调用ie自带的打印功能实现了网页的打印,下面我将这部分简短的代码为大家解读一下:
<body>
<form id="form1" runat="server">
<div>
我是要打印的内容!!!
</div>
<div >
<style>@media print {.btn{display: none;}}</style>这么分代码主要是实现打印内容不包含class=“btn”的html控件,这儿既是下面的btnPrint
<input id="btnPrint" type="button" value="打印" class="btn" /> 调用webprint默认的打印方法,其中class=“btn”指定了此控件不出现在打印的网页内容中
</div>
<div id="WebBrowser">
<object id="WebPrint" name="WebPrint" width="0" height="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>指定使用webprint对象,html5中警告object没有classid,问题没有解决,不过不影响正常使用打印控件
</div>
</form>
</body>
到此html代码部分搞定,由于ie默认不允许未经签名许可的activeX运行在ie中,下面需要更改ie浏览器的相关设置,使允许打印按钮完成对ie打印组件的调用,方法是internet选项->安全->选中网络图标然后点击‘详细’->设置所有activeX为允许(有效)状态,如下图所示:
由于我使用的是日文操作系统,菜单选项中文系统会有所差异,不过意到即可,大家自己可以找到设置的选项卡的。上图只是包含了部分activeX设置的图片,下面与activeX相关的都选择有效(允许)。
现在大家可以打印网页中的内容了。然后我将过程中其他遇到的问题说明一下:1,打印时我遇到默认情况下打印页面存在页眉页脚的问题,去掉打印网页时的页眉页脚的方法是点击打印按钮后,弹出的打印框里点击设置,将页眉页脚内容设置为空即可,如下图所示:
设置完成即可打印网页所需内容,不包含页眉页脚,也可设置自己的页眉页脚打印输出。
2,我在网上下载了lodop和jartoolsprinter,不知道该如何应用到自己编写的aspx网页中,目前还没有找到可行的方法,欢迎各位回帖指导。
|