您的位置:首页 > 编程语言 > ASP

ASP.NET项目申报系统-4.28~5.2总结

2012-05-03 15:51 417 查看
4.28

FileUpload不能用脚本触发click事件,是基于安全的考虑。搞了这么久的newsEdit页面报废了。以后尽量还是从网上找一些现成的代码,然后再弄吧。不是现成的代码,可能做一段时间后发现这个方法在实现上不可行。

News类中有好多string类型的变量,NewsAttach1到NewsAttach15,在程序中需要通过数字(1~15)使用这些变量的值或给这些变量赋值,
第一次做的尝试是GetAttach(News news,int n,out string newsattach),在函数中给newsattach赋予news.NewsAttach(一个数字),
不可行,因为C#中string是引用类型,但是进行赋值的时候,会在托管堆中重新分配一个新的空间存放新值。

ckeditor使用的问题------
配置:
1、Web中的bin文件夹下添加CKEditor.NET.dll,也可以通过右击Web网站解决方案,添加引用,选择它。
2、将“\_Samples”文件夹下的“ckeditor”文件夹,添加到网站根目录。
可以精简里面的内容,比如,lang下只保留en.js zh.js zh-cn.js,skins下只保留v2文件夹。
3、在config.js里面进行个性化配置

config.skin = 'v2';
config.resize_enabled = false;
config.toolbar =
[
['Bold', 'Italic', 'Underline', 'Strike', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink'],
['Cut', 'Copy', 'Paste', '-', 'Find', 'Replace'],
['Styles', 'Format', 'Font', 'FontSize', '-', 'TextColor', 'BGColor']
];
config.font_names='宋体/宋体;黑体/黑体;仿宋/仿宋_GB2312;楷体/楷体_GB2312;隶书/隶书;幼圆/幼圆;微软雅黑/微软雅黑;';


4、防止出现“从客户端(editor="<p>This is some <...")中检测到有潜在危险的 Request.Form 值。”这种问题,需要
1)在使用ckeditor插件的页面上方加入这个属性,<%@ Page ValidateRequest="false" %>
2)在webconfig里面加入<httpRuntime requestValidationMode="2.0"/>(VS2010使用asp.net 4.0,请求验证处理机制会使第一条失效,所以还要进行这个修改)

ASP.net前台:

head中
<script type="text/javascript" language="javascript" src="http://www.cnblogs.com/ckeditor/ckeditor.js"></script>
body中
<asp:TextBox ID="TextBoxNewsContent" runat="server" TextMode="MultiLine" Width="840px" Height="150px" ontextchange="textChange();" ></asp:TextBox>
<script type="text/javascript">
var editor=CKEDITOR.replace('<%=TextBoxNewsContent.ClientID %>');
</script>


JavaScript获取:

function beforePost() {
var obj = document.getElementById("TextBoxNewsTitle");
if (obj.value.length == 0) {
alert("新闻标题不能为空!");
obj.focus();
return false;
}
//editor.document.getBody().getText()取得纯文本
//editor.document.getBody().getHtml()取得html文本
if (editor.document.getBody().getText() == "") {
alert("新闻内容不能为空!");
return false;
}
return true;
}


ASP.net后台:
取得html文本:直接使用news.NewsContent=TextBoxNewsContent.Text;
将html文本赋给textbox也直接使用TextBoxNewsContent.Text=news.NewsContent;

4.29

在aspx.cs的代码中,可以直接使用Server.MapPath函数,但是在.cs的类文件中,不能如此使用,应使用System.Web.HttpContext.Current.Server.MapPath,aspx页面后台代码默认添加了这个httpcontext.current引用。

mysql中日期函数year(NewsDate)返回年份,month(NewsDate)返回月份,dayofmonth(NewsDate)返回月份中日数。
mysql中比较datetime和另一个日期是否是同一天,用where to_days('1989-12-12')=to_days(NewsDate)

原本ajaxcontroltoolkit中的日历控件是英文的,但是在ToolkitScriptManager控件中加入EnableScriptGlobalization= "true"后,就可以按照windows系统的语言版本进行调整,中文版windows就是中文的日历。

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization= "true">
</asp:ToolkitScriptManager>


尽量多的代码重用,这样再修改的时候,就可以仅修改一个地方,而不用每一处都进行修改。页面的重用,相同代码放到函数里面。

有些时候,遇到的问题,不好解决,可以先放放,像考试中遇到难题留到最后一样。到了后来,可能自己的能力提供了,问题就迎刃而解了。这次项目之前遗留的问题都记录下来了,最后发现好多问题后来都解决了。

在head里面经常用到的css和js的引用,注意script引用有开始和结束标签<script></script>,写成<script />这种形式会使页面在vs2010里或在浏览器调试的时候不显示。
<link rel="Stylesheet" href="http://www.cnblogs.com/Styles/table.css" type="text/css"/>
<script type="text/javascript" src="http://www.cnblogs.com/Scripts/projinfo.js"></script>

web.config中配置session模式(mode)默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。
1、服务器内存使用超过一定的限度,配置文件中processModel标签的memoryLimit属性
2、Global.asax或者Web.config文件被更改
3、Bin文件夹中的Web程序(DLL)被修改
4、杀毒软件扫描了一些.config文件。。。等。。。
以上情况下,保存session的进程会重启,session丢失。我遇到的情况是,project中upload附件上传页面,删除最后一个附件后,(估计是因为同时删除了文件夹),session丢失。
所以改成<sessionState mode="StateServer" timeout="30"/>保存到“ASP.NET 状态服务”这个服务中。
需要在管理->服务中手动开启这个服务。

定期备份自己的工程,以防vss上的版本被较旧的文件覆盖或被被别人串改。

css中设置背景图片的语句:background-image:url(../Images/home/top_dh01.gif) ,图片url是相对css文件的相对地址,仅能用相对路径!!

4.30

tinyMCE使用的问题(比ckeditor加载速度快很多、功能稍弱)------

配置:
1、在官网下载tinymce最新版,下载tinymce_lang_pack.zip(汉语支持包),解压后将其中的内容与tinymce中的内容进行合并,并放到网站Scripts/目录下
2、将tiny_mce\themes\advanced\skins\default\content.css中的第一行改成
body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; margin:8px;},

使字体由10px改成14px,解决字体默认太小的问题。
ASP前台:

<asp:TextBox ID="TextBoxNewsContent" TextMode="MultiLine" runat="server" onfocus='tinyMCEinit();' Width="800px" Height="300px"/>
<asp:Button ID="ButtonPost" runat="server" Text="保存并发布" OnClientClick="return beforePost();"/>


JavaScript:

<script language="javascript" type="text/javascript">
function tinyMCEinit() {
tinyMCE.init({
mode: "exact",
elements: "TextBoxNewsContent", //对应下面的textbox的id
theme: "advanced", //还可以是"simple"
plugins: "pagebreak",
theme_advanced_buttons1: "bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,fontsizeselect,backcolor,forecolor,undo,redo,",
theme_advanced_buttons2: "",
theme_advanced_buttons3: "",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_path_location: "bottom",
width: 800, //这里设置的是留言板的长宽
height: 350,
extended_valid_elements: "a[name|href|target|title|onclick],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
language: "ch" //这个设置按钮提示语为中文,很有用
});
}
function beforePost() {
var content = tinyMCE.get('TextBoxNewsContent').getContent();
if (content.length == 0) {
alert('内容不能为空!');
return false;
}
return true;
}

</script>


后台:
直接使用TextBoxNewsContent.Text来获取,同ckeditor一样。

5.1

以后设计数据库表格的时候,尽量考虑全面,宁愿多存一些不太重要的信息,也不要保存的信息过少。
比如DownloadFile表格,不能只有一个id和filename,还应该有发布者、发布日期等等附属信息,以便实现用户不能删除不是自己发布的文件。

数据库中存东西,尽量都存主键,News信息表中NewsEditor如果存的是新闻发布者的名字,但是该用户改名了,就会使它无法修改自己的News;而且,其他用户只要将自己的UsrName改成其他用户的名字,就可以随意篡改别人的News。存string无非就是为了后台代码好写,直接单表查询并且写到页面的控件上就行了,但是这会带来逻辑错误,千万不可行。

GridView隐藏某一列,这一列可以用来存这一行信息的id。更好的实现方式是设置GridView的DataKeyNames属性,然后在后台用DataKeys获取保存的值

GridViewNewsManage.DataSource = newsManage.GetList("NewsType=0");
GridViewNewsManage.DataBind();
GridViewNewsManage.Columns[6].Visible = false;


GridView的模版列中加入按钮,触发按钮事件后,如何获取该行的某个值?
前台:

<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ItemTemplate>
</asp:TemplateField>


后台:

protected void Button1_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
GridViewRow row = btn.Parent.Parent as GridViewRow;
string a = row.Cells[0].ToString();//获得第一个单元格的值
string b = this.GridView1.DataKeys[row.DataItemIndex][0].ToString();//获得DataKeys的值
}


5.2

date_format(NewsDate,'%Y-%m-%d') mysql格式化输出函数 %Y年份,%m月份,%d月中的天数,使用:

select date_format(NewsDate,'%Y-%m-%d') from news where ...

以下css样式针对class属性为headline2的链接

.headline2 a {
color: rgb(255, 255, 255); line-height: 135%; font-size: 14px; font-weight: bold; text-decoration: none;
}
.headline2 a:hover {
color: rgb(255, 204, 0); text-decoration: underline;
}


以下css样式设置图片的功能类似于button,鼠标移动上去会显示“手型”

<img src="../Images/homepage/more.gif" onclick="window.location='MoreDown.aspx'" style="cursor:pointer;">


GridView里设置 AllowPaging="true" PageSize="8",再在GridView中加入这个属性<PagerSettings Visible="false"/>,就可以分页但是不显示下面的跳转到第几页的按钮

script紧跟元素后面,因为js是按照从上到下的顺序执行的,如果放在head中会获取不到label这个元素(还没有渲染)

<asp:Label ID="LabelMydate" runat="server" Text=""></asp:Label>


<script type="text/javascript">
var today = new Date();//获取当前日期事件
var obj = document.getElementById('<%= LabelMydate.ClientID %>');
var d = new Array(
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六");
//today.toLocaleDateString()相当于(today.getYear()) + "年" + (today.getMonth() + 1) + "月" + today.getDate() + "日 "
obj.innerHTML = '今天是 ' + today.toLocaleDateString() + d[today.getDay()];
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐