日期:2014-05-18  浏览次数:20366 次

又来请教
<%@ page language="vb"%>
<%@import namespace="system.data"%>
<script runat="server">
public ds as new dataset
public dt as new datatable
public keys as new datacolumn
public myrow as datarow

sub page_load(ob as object,ev as eventargs)
if page.ispostback=false then
dt.Columns.add("firstname",system.type.gettype("System.String"))  
dt.columns.add("lastname",system.type.gettype("System.String"))
dt.columns.add("userid",system.type.gettype("System.Int32"))
dt.columns("userid").autoincrement=true
keys=dt.columns("userid")
ds.tables.add(dt)
myrow=dt.newrow()
myrow(0)="jone"
myrow(1)="s"
dt.rows.add(myrow)
end if 
response.write(dt.rows(0)("firstname").tostring )
end sub


</script>
<html>
<body>
<form runat="server">
<asp:button text="click" runat="server"/>
</form>
</body>
</html>

如果在page_load中加入page.ispostback判断,那么当表单被提交时,不会再在该SUB中定义dataset.那么response.write(dt.rows(0)("firstname").tostring )报错,说找不到该行
如果不加入page.ispostback判断,那么每次页面加载都会重新定义dataset,当表单被提交后,不会报错,显示正确的值
难道说dataset在每次重新执行asp.net页时会自动删除需要重新定义?不是一直贮留在内存中?

------解决方案--------------------
服务器内存只有在接收到http请求之后根据请求调用IhttpHandler来处理计算页面的时候才会给你用,一旦算完立刻释放,把结果反回给客户端浏览器
这个是web程序基本运行模式,只要是iis等web服务器提供的服务一定遵循这个规则,部分控件的值可以自动保存在viewstate里面,但是dataset不会,如果你要保存dataset需要自己把它写入session