【问题标题】:How to get value from javascript in asp.net page based on masterpage which can have only one asp.net form如何从基于 masterpage 的 asp.net 页面中的 javascript 获取价值,masterpage 只能有一个 asp.net 表单
【发布时间】:2012-09-13 13:12:10
【问题描述】:

我想创建一个一次性密码的快速模拟。问题是我在一个母版页子页面中,我只能在一个内容占位符中有一个 asp.net 表单,另一个包含一个生成随机代码的 javascript 代码。

如何将此代码传递给 asp.net,以便当用户单击验证时,我可以将他输入的代码与 javascript 生成的随机代码进行比较(可能是 ajax,但我看不出如何?)

如果我可以有 2 个 asp.net 表单,那将不是问题。

更新:我已修改下面的源代码以包含 Andrei 建议的解决方案。

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <form id="form1" runat="server">
        Username: <asp:TextBox ID="txtUserName" runat="server" /></br>
        OTP: <asp:TextBox ID="txtOTP" runat="server" /></br>
        <asp:TextBox ID="OtpHiddenField" runat="server" /></br>
        <asp:Button ID="btnValidate" runat="server" onclick="btnValidate_Click" Text="Validate" /></br>
</form>
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
<h2>Fake OTP Simulation</h2>
Enter "John"
</br>
Enter OTP 
<script type='text/javascript'>
    var pass = String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9));
    document.write(pass);
    document.getElementById('<%= OtpHiddenField.ClientID %>').value = pass;
</script>

【问题讨论】:

    标签: javascript asp.net master-pages


    【解决方案1】:

    您可以将生成的值插入将与表单一起发布的隐藏字段中。

    <asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" Runat="Server">
        <form id="form1" runat="server">
            Username: <asp:TextBox ID="txtUserName" runat="server" /><br/>
            OTP: <asp:TextBox ID="txtOTP" runat="server" /><br/>
            <asp:Button ID="btnValidate" runat="server" onclick="btnValidate_Click" Text="Validate" /><br/>
            <asp:HiddenField ID="OtpHiddenField" runat="server" />
    </form>
    </asp:Content>
    
    <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">
    <h2>Fake OTP Simulation</h2>
    Enter "John"
    <br/>
    Enter OTP 
    <script type='text/javascript'>
        function getRandomInt(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        var pass = String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9));
        document.write(pass);
        document.getElementById('<%= OtpHiddenField.ClientID %>').value = pass;
    </script>
    </asp:Content>
    

    我希望您知道这种方法非常非常脆弱。

    【讨论】:

    • 聪明的主意。尽管如此,当我在 Page_Load 中测试 OtpHiddenField.Value 时,它​​始终是空字符串(“”)。为什么?
    • 对于漏洞来说没关系,因为它只是用于原型功能:)
    • @user310291,为我工作,只是在本地尝试过。页面上是否有任何 javascript 错误?可能生成的密码没有插入到字段中。
    • 您的代码在 dom 端工作,我从隐藏端获得 otp 值。但是当我单击验证时,在代码绑定方面(请参阅上面的代码更新)OtpHiddenField.Value 给出空字符串。我知道这不合逻辑,但你真的测试过代码隐藏吗?
    • @user310291,是的,我也测试了后面的代码,但差别不大。 ASP.NET 在页面上只允许一个表单,并且通常它已经在母版页中生成。所以我在你的代码中注释掉了form 标签。我不知道 ASP.NET 在嵌套表单中的表现如何,尽管我知道它不应该处理这种情况。其实我应该在答案中指出,对不起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2018-02-15
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多