我有一个自定义控件,它继承自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上设置值。
答案 0 :(得分:1)
您所需要做的就是为onchange
触发input
事件,因为ASP.NET将回发代码添加到onchange
属性中。最简单的方法是手动调用onchange
var outputData = document.getElementById("CameraScannerTextbox1");
outputData.value = barcode.Value;
outputData.onchange();
答案 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。