在JS中设置输入值时,使用AutoPostBack不起作用

时间:2019-03-03 10:12:30

标签: asp.net

我有一个自定义控件,它继承自TextBox。 这使我可以使用TextBox的AutoPostBack属性。当我更改值并单击文本框之外时,此属性使父页面上的Page_Load方法启动。 我在JS中设置呈现文本框的值,如下所示

var outputData = document.getElementById("CameraScannerTextbox1");
outputData.value = barcode.Value;

此代码运行时,我期望Page_Load方法再次运行。 我已经尝试过

outputData.focus();
outputData.value = barcode.Value;
outputData.blur();

Page_Load中的代码为

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        Label1.Text = CameraScannerTextbox1.Text;
    }
}

所以基本上我希望条形码中包含任何内容。在服务器上的Label1.Text上设置值。

2 个答案:

答案 0 :(得分:1)

您所需要做的就是为onchange触发input事件,因为ASP.NET将回发代码添加到onchange属性中。最简单的方法是手动调用onchange

var outputData = document.getElementById("CameraScannerTextbox1");
outputData.value = barcode.Value;
outputData.onchange();

有关模拟onchange事件的更高级技术,请参见thisthis答案。

答案 1 :(得分:0)

您只需使用__doPostBack自己触发回发即可。

<asp:TextBox ID="CameraScannerTextbox1" runat="server" ClientIDMode="Static" AutoPostBack="true"></asp:TextBox>

<asp:PlaceHolder ID="PlaceHolder1" runat="server">

    <script>
        var outputData = document.getElementById("CameraScannerTextbox1");
        outputData.value = '123456';
        __doPostBack('CameraScannerTextbox1', '');
    </script>

</asp:PlaceHolder>

后面的代码

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        Label1.Text = CameraScannerTextbox1.Text;
        PlaceHolder1.Visible = false;
    }
}

并非我将javascript放在了隐藏在PostBack上的PlaceHolder中,否则它将创建一个PostBack循环。但是还有其他方法prevent that