日期:2014-05-17  浏览次数:20462 次

ViewState问题 高手指教
JScript code
<script type="text/javascript" language="javascript">
        function txt_onkeydown() {
            if (event.keyCode == 13) {
                <%bandRpt_ISDetail();%>

            }
        }
    </script>
C# code


protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                                       DataTable dtInS = new DataTable();
                        dtInS.Columns.Add(new DataColumn("stockName"));
                        dtInS.Columns.Add(new DataColumn("scanNo"));
                        dtInS.Columns.Add(new DataColumn("Num"));
                        dtInS.Columns.Add(new DataColumn("Uint"));

                }
            }
        }
 public void bandRpt_ISDetail()
        {
            DataTable dt = (DataTable)ViewState["dtInS"];
            string scanNo = txt_scan_No.Text;
            if (!string.IsNullOrEmpty(scanNo))
            {
                DataRow dr = dt.NewRow();
                dr["stockName"] = hf_stockName.Value;
                dr["Uint"] = "台";
                dr["Num"] = "1";
                dr["scanNo"] = scanNo;
                dt.Rows.Add(dr);
                
                ViewState["dtInS"] = dt;

                rpt_ISDetail.DataSource = dt;
                rpt_ISDetail.DataBind();
            }
        }



每次我的打他table都被清空了 扫描原因啊

------解决方案--------------------
楼主,是这样的,当asp.net在编译的时候,会把你的小脚本代码段,<%bandRpt_ISDetail();%>编译成私有字段,然后呢,在页面Render的时候呢,会去Render这些字段,这些字段包括服务器控件,页面的表达式和小脚本代码段,意思是你页面加载的时候,已经执行了你的bandRpt_ISDetail方法,所以,当你在页面上进行if(event.keyCode == 13) {<%bandRpt_ISDetail();%>}毫无意义,最后还是楼主你对asp.net的概念理解可能不对,多多学习