|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQLServer还有更多的扩展,可以用存储过程,数据库大小无极限限制。数据|反复|反复提交这篇文章从语法上看,原作者应当是从甚么中央翻译过去的。
复杂的办理计划:
最复杂的体例就是当用户提交以后,在你的服务器端控件的代码中利用Response.Redirect("selfPage")语句。可是年夜多的数包含我都不利用这类办法。
屡次提交:
请注重:这篇文章并非有关怎样避免在一个页面中屡次提交。这篇文章是教你在提交了哀求以后怎样避免页面举行革新。情形是如许的,当用户提交了按钮以后,终极用户就不克不及再点击提交按钮了。可是如许终极用户仍旧能够经由过程点击扫瞄器的革新按钮来提交数据。假如要避免屡次提交你能够往http://metabuilders.com/网上找一些材料,它那边有一个提交控件能够用。
惯例的办理计划
习气的办理办法是存储Session的ID和当提交时ViewState中存储的SessionID比拟较来避免用户革新屏屏幕。条件你的程序中同意了主动回发,假如不是的话,就得在hiddenfield存储这个变量了。上面给出一个典范的例子。在Page_Load事务中你存储了第一次提交时的SessionID和一个工夫戳。
protectedSystem.Web.UI.WebControls.ButtonSubmitButton;
protectedSystem.Web.UI.WebControls.LabelRefreshID;
privatevoidPage_Load(objectsender,System.EventArgse)
{
if(RefreshID.Text.Length==0)
{
RefreshID.Text=Session.SessionID+DateTime.Now.Ticks.ToString();
}
}
privatevoidButton1_Click(objectsender,System.EventArgse)
{
stringsesToken=(string)Session[FrameworkConst.SYNC_CONTROL_KEYWORD];stringpageToken=RefreshID.Text;
if(sesToken!=null&&sesToken!=pageToken)
{
Response.Write("TheRefreshwasperformedaftersubmit.");
}
else
{
//doyourprocessingheretoavoidRefreshtrap
Response.Write("Theprocessingisdonehere.Disablingsubmit
buttonsothatusercannotperformmultiplesubmit.");
Response.Write("ButstillusercanpeformRefreshonpage.");
}
Session[FrameworkConst.SYNC_CONTROL_KEYWORD]=Session.SessionID+DateTime.Now.Ticks.ToString();
RefreshID.Text=sesToken;
SubmitButton.Enabled=false;
}
分歧的办理计划:
侥幸的事,asp.net供应了一些更复杂的办法。下面的办理计划的弱点是我们要在控钮的事务中本人决意一些逻辑成绩。假想一下,假如在你的办理计划中有成百个要提交的页面,你就得写上很多个如许的逻辑。自界说web控件和HTTPMOdules供应了不异的办理法。你能够将这个控件进在你必要把持的页面上,它就能够起感化了。固然,并非一切的情形都必要的,好比说搜刮页面是同意用户革新的。可是,在页面中有拔出、更新、删除数据库的操纵时,把持革新按钮是相对有需要的。
上面来看一下下面的计划是怎样事情的。
第一步:必要在System.web节中注册HTTPModule模块。
<httpModules>
<addname="SyncHttpModule"type="EAD.Controller.SyncHttpModule,sync"/>
</httpModules>
第二步:要在把持页的页面内放进我们开辟好的控件。
事情道理:
它的事情道理和后面一般讲的是差未几的。只是这里供应了一个通用的办法。这里供应了一种通用的体例。在我看来,假如你有一些好的形式,将年夜年夜的加速你的开辟速率。
我们必要在第一次提交时在Session中存储标志,并在哀求时对照它们是不是分歧。经由过程HTTPhandler,我们在Session中存储标志。有如许的一个事务PreRequestHandlerExecute我们能够经由过程它找到Session,假如是别的事务的话Session是不存在的,好比BeginRequest事务。在这个事务中对照二者的值,假如分歧则证实是Refresh事务。这时候你能够增加本人的处置办法,我通常为将转向一个页面告知用户不克不及重复提交。
privatevoidOnPreRequestHandlerExecute(objectsource,EventArgse)
{
HttpContextcontext=((HttpApplication)source).Context;
string_keyword=FrameworkConst.SYNC_CONTROL_KEYWORD;
stringsesToken=(string)context.Session[_keyword];
stringreqToken=context.Request.Params[_keyword];
//假如没有提交过,则保留Session和标志值
if(reqToken!=FrameworkConst.BYPASS_SYNC_KEYWORD)
{
context.Session[_keyword]=context.Session.SessionID+DateTime.Now.Ticks.ToString();
}
if(reqToken!=null&&reqToken!=sesToken)
{
stringpath=context.Request.ApplicationPath+
&"/Common/SyncControl.aspx?returnUrl="+
&context.Request.Url.AbsolutePath;
context.Server.Transfer(path);
}
}
SyncControl控件将创建一个hiddeninputfield将在HTTPmodule中设置的Session保留起来。
</p>在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 |
|