一个Default.aspx页面,一个runat=server 的Form,form中有两个input输入域:txtUserName和txtPassword,实现用户的登录认证,并且txtUserName和txtPassWord可能取自其它页面的提交.在后台的Page_load事件中实现两个功能:
1、PostBack状态下,取txtUserName和txtPassWord的值到后台数据库进行比较验证。2、非PostBack状态下,判断txtUserName和txtPassWord的值是否为空,如果不为空,触发form的提交,使用其执行PostBack状态下的代码完成验证。我现在就是不知道如果在代码中实现FORM的提交???请教了!!!

解决方案 »

  1.   

    1、PostBack状态下,取txtUserName和txtPassWord的值到后台数据库进行比较验证。
    加一个Button的服务器端事件不可以吗?
    里面获得用户名,密码。然后访问数据库核实即可。
    -------------------
    2、非PostBack状态下,判断txtUserName和txtPassWord的值是否为空,如果不为空,触发form的提交,使用其执行PostBack状态下的代码完成验证。那用JS实现可以吧,客户端判断用户名和密码是否为空。若为空则不向服务器端提交数据嘛。
      

  2.   

    同意“ adandelion(猪头) ”的办法
      

  3.   

    ASPX文件中
    <script>
    function checkForm()
    {
    if (TxtName.value=="")
    {
    alert("请输入用户名");
    return false
    }
    if (TxtPass.value=="")
    {
    alert("请输入密码");
    return false
    }
    return true;
    }
    </script>
    <form id="Form1" method="post" runat="server">
    <TR>
    <TD>名称</TD>
    <TD>
    <asp:TextBox id="TxtName" runat="server"></asp:TextBox></TD>
    <TD></TD>
    </TR>
    <TR>
    <TD>日期</TD>
    <TD>
    <asp:TextBox id="TxtPass" runat="server"></asp:TextBox></TD>
    <TD></TD>
    </TR>
    <asp:Button id="BtnSure" runat="server" Text="保存"></asp:Button>&nbsp;&nbsp;
    </form>-------------
    aspx.cs文件中
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if (!IsPostBack)
    {
    BtnSure.Attributes.Add("onclick","return checkForm();");
    }
    }
    private void BtnSure_Click(object sender, System.EventArgs e)
    {
    string strName = TxtName.Text;
    string strPass = TxtPass.Text;
    ...........//访问数据库是否是合法的用户。
    }我没测试,楼主参考。
      

  4.   

    那照你说应该在page_load事件中写
    private sub Page_load(Byval sender as object,byval e as eventargs)
       if not ispostback then
          if txtusername.text="" or txtuserpass.text="" then
              response.write("<script>alert('密码不能为空");</script>")
          else
           ''验证
       end if
       end if
    end sub
    这样就可以了啊。
      

  5.   

    2、非PostBack状态下,判断txtUserName和txtPassWord的值是否为空,如果不为空,触发form的提交,使用其执行PostBack状态下的代码完成验证。那用JS实现可以吧,客户端判断用户名和密码是否为空。若为空则不向服务器端提交数据嘛。
    ==================================================================
    这个想法值得考虑,不知有没有办法在代码中实现form提交?
      

  6.   

    1、PostBack状态下,取txtUserName和txtPassWord的值到后台数据库进行比较验证。2、非PostBack状态下,判断txtUserName和txtPassWord的值是否为空,如果不为空,触发form的提交,使用其执行PostBack状态下的代码完成验证。if(this.PostBack=false) then
       字符串变量=txtUserName.value.toSring();
       字符串变量=txtPassWord.value.toSring();
    else if(txtUserName.value=="" && txtPassWord.value=="")
         提交事件
      

  7.   

    hackate(兰花开香入梦境,独思佳人亦飘然!!),我就是不知道怎样在代码页面中触发Form的提交?
      

  8.   

    js错了,有form的话要写form的名称的。
    <script>
    function checkForm()
    {
    if (Form1.TxtName.value=="")
    {
    alert("请输入用户名");
    return false
    }
    if (Form1.TxtPass.value=="")
    {
    alert("请输入密码");
    return false
    }
    return true;
    }
    </script>
    --------------
     hackate(兰花开香入梦境,独思佳人亦飘然!!)
    if not ispostback then                      
          if txtusername.text="" or txtuserpass.text="" then
              response.write("<script>alert('密码不能为空");</script>")
          else
           ''验证
       end if
    end sub
    ////////////////
    //是不是刚打开页面的时候就判断用户名是否为空?用户提交按钮的时候就不触发判断用户名是否为空了????这样好象有问题吧?
      

  9.   

    我上面的代码是有问题的!因为很久没搞C#可能个别地方写错。但是思路是这样的。
    C#里面是isPostback 少写了个=号。成了付值了。你会调试啦!嘿嘿!
      

  10.   

    并且txtUserName和txtPassWord可能取自其它页面的提交
    --------------------------
    ........我感觉这里麻烦的,其它页面传递的话你如何传递过来????
    传统的ASP的换是Request("TxtName")的,但在ASP.NET中,这个也可以用,但
    -------------------------
    触发Form的提交
    若是在本页的话,是使用Button的(submit类型),若来自其它页。感觉麻烦了。。
      

  11.   

    我都被你搞糊涂了。我把我的理解讲一下...楼主现在是要处理别的页面提交过来的数据吗?你完全可以在本页面处理啊...为什么要从别的页面提交过来啊,这样麻烦,而且效率又不高..如果直接在本页的话,你这个跟page_load就没半点关系,你完全可以把处理txtusername和txtpassword写在button的Click事件中,.....这个<asp:button实际上是submit按钮,你不用去考虑什么触发form的问题,你只要按了,他就提交了,恩...
      

  12.   

    你用验证控件嘛,如
     <asp:TextBox id="txtUserName" runat="server"/>
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1"  
                ControlToValidate="txtUserName"
                Text="请输入姓名!" 
                runat="server"/>
    <asp:Button id="btn" onclick="xx" runat="server"/>在<script>里
    protected void xx(){
     if(Page.IsValid)
    {
       //验证
    }
    }
    这样如果不输入姓名是提交不上的
      

  13.   

    hackate(兰花开香入梦境,独思佳人亦飘然!!) 
    ---------------
    嘿嘿~~``大虾糊涂了,难得啊~~~`
      

  14.   

    楼主的意思是数据可以来自本页也可以来自其他页面
    如果来自本页应该用客户端验证,vld就可以验证。如果来自其他页面可能其他页面没验证,楼主还是要在pageload里来区别是不是这个意思,实际你就对其他页面数据在pageload验证,就可以了,是空就返回本页
      

  15.   

    附代码 (没测试)
    private void Page_load( object sender, eventargs e)
    {
         if (!isPostBack){
          if (txtusername.text="" or txtuserpass.text="")
                { 
              response.write("<script>alert('用户名或密码密码不能为空");</script>")
                }
     } 
     }   这样就回到本页面了
      

  16.   

    不好意思,我没说清楚意思,再说一下:我的这个页面是登录页面,我这样做的目我是因为本页面中用来验证的用户名和密码可以通过本页面输入,也可以来自另外系统的提交。我要实现是:如果用户名密码来自用户的输入,用户会点击相应的登录按钮实现Form提交(PostBack状态),在后台Page_Load事件中直接判断如果是PostBack,取到提交过来的用户名/密码到数据库验证就行了。在执行Page_Load时,如果不是PostBack,就有两种可能了:一种是新打开该页面,根据用户名和密码作一下判断,都为空,这种情况下不作任何处理;一种是另外系统向这个页面作了提交,用户名和密码不为空时,自动触发本页面的提交事件,使PostBack为真,不要用户点击登录按钮,从而在PostBack状态下实现自动登录。
    不知我说明白了没有?我现在唯一不知道的就是在来自其它页面提交的情况下,怎样在后台代码中自动触发Form的提交事件。
      

  17.   

    我目前的实现方式是按照adandelion(猪头)所说的:在客户端代码中的body的onload的事件中进行判断,然后确定是否作自动提交:function PageLoad()
    {
    if(frmDefault.txtUserName.value=="" || frmDefault.txtPassWord.value=="")
    {
    frmDefault.txtUserName.focus();
    }
    else
    {
    frmDefault.submit();
    }
    }
      

  18.   

    回复人: navy_koo(平湖秋水) ( ) 信誉:99  2005-08-13 19:42:00  得分: 0  
     
     
       两种方法都可以。不过现在越来越多的验证都不会在客户端写js,因为不安全;
      
     
    ============================================================
    哦,那怎样在后台的代码页中触发前台aspx页面中form的提交?
      

  19.   

    楼主你看看我的方法能否实现你想要的功能(我借助了一个中间页面)
    以下我是利用 window.open() 新开窗体,即去除了 IE 工具栏,又绕过了“上网助手”等广告拦截工具的阻挠。
    一、登录页面(Login.aspx)
    <INPUT type="submit" onclick="LoginSys()" value="登录" id="B_Login" name="B_Login">
      
    function LoginSys()
    {  
       window.open('ValidWeb.aspx','tmp','top=0,left=0,height=560,width=800,scrollbars=no,toolbar=no,location=no,menubar=no,resizable=no,status=no')
    }二、验证页面(ValidWeb.aspx)一张空白页面(把按钮隐藏起来)
        
    <INPUT type="hidden" id="Hn_LginName" runat="server"><INPUT type="hidden" id="Hn_Password" runat="server">
    <asp:Button id="B_Login" runat="server" Text="验证"></asp:Button>function GetValue()
    {
    var op = window.opener;
    if(op == null){self.close();return;}
    document.getElementById("Hn_LginName").value =op.document.getElementById("TX_UserName").value;
    document.getElementById("Hn_Password").value = op.document.getElementById("TX_Password").value;
    document.getElementById("B_Login").click();//触发点击按钮事件
    }ValidWeb.cs 中
    if(!IsPostBack){this.B_Login.Style["display"]="none";}//把按钮隐藏起来
    private void B_Login_Click(object sender, System.EventArgs e)
    {
      if(…………)  //通过验证
      {
    Response.Redirect("../Default.aspx");
      }
      Response.Write("<script language='javascript'>alert('用户名或密码错误!');self.close();</script>");
      Response.End();
    }这里要注意的是如果是用 Form 认证,那么“ValidWeb.aspx”则必须放在任何人都能访问的目录依你的需求,你可以换种思路
    只要用 js 执行登录按钮的 click() ,实质上就是实现了该按钮的提交
      

  20.   

    其实,此问题的关键就在于,楼主想实现在某种条件下,能否由服务端控制在页面加载完毕之后,自动提交页面.
    有很多种方法可以实现的.
    比如在页面中放一个hidden,然后在服务端先判断,需要自动提交页面的时候,就向此hidden写值1,否则 写0,然后页面加载完毕,在页面的底部写一个函数,让它自动执行,在函数里面判断此hidden的值,如果为1,那么自动点击提交按钮(当然你可以将此按钮做样式让它隐藏style="display:none"):document.all("button1").click();这样它就提交了.
    再比如,你可直接在服务端输出脚本来点击按钮进行提交.if(需要提交页面)
    (
    string mystr = "<script>document.all('button1').click();</script>";
    if(!this.IsClientScriptBlockRegistered("aaa"))
    {
    this.RegisterStartupScript("aaa",mystr);
    }
    )
    如此,当需要提交页面时,自然会输出脚本,待页面加载完毕,即自动点击提交按钮
      

  21.   

    其实用验证控件就可以了,按楼主需求如果是服务器端控件可以在button的click事件中写或者用button.attributes.add中写都会调用,如果是html的button,直接在submit时调用一个javascript函数来做验证。