【问题标题】:Automatically submitting an asp.net form with javascript使用 javascript 自动提交 asp.net 表单
【发布时间】:2012-03-20 09:56:08
【问题描述】:

我需要自动将用户登录到将从 php 网页登录的 asp.net 应用程序。我认为这会相当简单,但在让它工作时遇到了问题。我设置了一个远程测试页面,将电子邮件和密码提交到登录页面。在登录页面上,我添加了以下代码 -

<script runat="server">

void Page_Load(object sender, EventArgs e){

if (IsPostBack) {
    // It is a postback
} else {
    // It is not a postback

Session["email"]= Request.Form["email"];
Session["password"]= Request.Form["password"];
Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "submitForm()", true);
}

</script>


<script type="text/javascript">
    function submitForm() {
    document.forms["form1"].elements["email"].value = "<%= Session["email"] %>";
    document.forms["form1"].password.value = "<%= Session["password"] %>";
    document.forms["form1"].submit();
    }
</script>

如果我删除 document.forms["form1"].submit();我被带到登录页面,并且电子邮件和密码填充在适当的框中,如果我然后手动单击提交按钮,我将登录。作为测试,我只删除了 document.forms [“form1”]。 password.value = "";行,它似乎提交了表单,因为我收到了一个验证错误,说需要密码(因为我会在没有密码的情况下手动提交登录)

但是,就目前而言,它会将我带到登录页面并且仅填充电子邮件,我假设电子邮件和密码都已发送,然后电子邮件在汇总后消失了,但不知道为什么会这样(鉴于手动提交有效)我是否遗漏了一些明显的东西?

谢谢

表单标记是 -

<form id="form1" runat="server">


    <table class="loginpanelouter" border="0" cellpadding="0" cellspacing="0" align="center">
        <tr>
            <td class="loginlogo" colspan="2">
                <asp:Image ID="CMSLogo" runat="server" />
            </td>
        </tr>
        <tr>
            <td class="logininvalid" colspan="2">
                <asp:Label ID="ErrorMessage" runat="server"></asp:Label>
            </td>
        </tr>
        <tr>
            <td class="loginforgot" colspan="2">
                <asp:LinkButton ID="ForgottenPassBtn" CausesValidation="false" runat="server">Forgotten Password?</asp:LinkButton>
            </td>
        </tr>
        <tr>
            <td class="logintext">
                Email:&nbsp;&nbsp;
            </td>
            <td valign="middle" width="200">
                <asp:TextBox ID="email" CssClass="loginpagefields" runat="server" size="25"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="logintext">
                &nbsp;
            </td>
            <td width="240" valign="middle">
                <asp:RegularExpressionValidator ID="emailValid" runat="server" ValidationExpression="[\w\.-]+(\+[\w-]*)?@([\w-]+\.)+[\w-]+"
                    ErrorMessage="Please enter a valid email address." ControlToValidate="email"
                    EnableClientScript="False"></asp:RegularExpressionValidator>
            </td>
        </tr>
        <tr>
            <td class="logintext">
                Password:&nbsp;&nbsp;
            </td>
            <td width="200" valign="middle">
                <asp:TextBox ID="password" CssClass="loginpagefields" runat="server" size="25" TextMode="password"></asp:TextBox>&nbsp;&nbsp;&nbsp;
            </td>
        </tr>
        <tr>
            <td class="logintext">
                &nbsp;
            </td>
            <td width="240" valign="middle">
                <asp:RequiredFieldValidator ID="passwordRequired" runat="server" ErrorMessage="Please enter your Password"
                    Display="Static" ControlToValidate="password" EnableClientScript="False"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <table>
                    <tr>
                        <td class="loginremeber">
                            <asp:CheckBox ID="RememberLogin" runat="server" Text="Remember my sign in details"
                                ToolTip="Please select this box if you wish your sign in details to be remembered">
                            </asp:CheckBox>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        </td>
                        <td width="120px" valign="middle" align="right">
                            <asp:Button ID="LoginBtn" runat="server" CssClass="buttonstyle" Text="Sign in" ToolTip="Please click to sign in">
                            </asp:Button>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td colspan="2" height="35">
                &nbsp;
            </td>
        </tr>
    </table>
    </form>

【问题讨论】:

  • 您的form 标记是什么样的?为什么您以一种方式访问​​ email 字段 (.elements["email"]) 而以另一种方式 (.password) 访问 password 字段?
  • 旁注:以这种方式回显电子邮件和密码存在几个问题,尤其是您以纯文本回显密码。此外,当您在 JavaScript 字符串文字中输出服务器端值时,您必须确保您输出的内容始终是字符串文字的有效内容。就您现在的代码而言,如果我的电子邮件或密码中有",则脚本将中断。同样,如果我在任一字段中有一个反斜杠(也许我正在使用密码“foo\bar”),该字段将得到错误的值(因为字符串文字中的\b 是一个退格)。
  • 我在上面粘贴了表单标记。我还使电子邮件与密码一致,但没有任何区别。谢谢

标签: javascript asp.net


【解决方案1】:

我设法让它工作。

由于某种原因,它不能与 -

document.forms["form1"].submit();

但将其更改为 -

document.forms["form1"].elements["LoginBtn"].click();

现在让我登录。

【讨论】:

    【解决方案2】:

    它不能与提交一起工作的原因是由于您没有输入类型=“提交”。 asp:button 不一定是“提交”按钮,它被呈现为执行操作的按钮。 Submit 按钮执行 POST 到 FORM'S ACTION PAGE。如果没有定义操作页面(在您的示例中就是这种情况),则不会发生任何事情。

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      相关资源
      最近更新 更多