繁体   English   中英

DropDownList 事件未在 AutoPostBack 设置为 true 时触发

[英]DropDownList event not firing with AutoPostBack set to true

我的网页中有 DropDownList,每次用户更改 DropDownList 中的选定值时,我都想填充 TextBox。

我的问题是当我改变这个值时这个事件没有触发。 有趣的是,只有当我更改值并按下按钮时才会触发此事件,这会创建新请求。

我尝试将 AutoPostBack 值更改为 true,尝试更改 ViewStateMode 并尝试在 textChanged 事件上触发此函数。 我还在数据绑定功能之前添加了条件 !isPostBack。

if (!IsPostBack)
{
    LoadDatabaseContent();
}

这里是事件函数。

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();

    byte[] buf = new byte[8192];

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://localhost:44333/Backend2.aspx?update=true&id=" + DropDownList1.SelectedItem.Text);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    Stream resStream = response.GetResponseStream();
    int count;  
    do
    {
        count = resStream.Read(buf, 0, buf.Length);
        if (count != 0)
        {
            string tempString = Encoding.ASCII.GetString(buf, 0, count);

            sb.Append(tempString);
        }
    }
    while (count > 0);
    Response.Write(sb.ToString());

    //createTextBox.Text = sb.ToString();

    resStream.Dispose();
    response.Dispose();
}

ASPX 代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Backend.aspx.cs" Inherits="APIS.Backend" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>
</title>
</head>
<body>
<form id="form1" runat="server">
    <div>
        <asp:Button ID="buttonGeneratePdf" runat="server" OnClick="buttonGeneratePdf_Click" Text="Generate PDF" />
        <br />
        <asp:Button ID="buttonGenerateQrCode" runat="server" OnClick="buttonGenerateQrCode_Click" Text="Generate QR" />
        <br />
    </div>
    <div>
    <asp:DropDownList ID="DropDownList1" runat="server" Width="400px" Height="16px" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" 
OnTextChanged="DropDownList1_TextChanged">
    </asp:DropDownList>
    </div>
</form>
</body>
</html>

编辑:

我有两个相互通信的“后端”。 首先创建 REST 请求,然后接受此请求,并根据查询字符串从数据库中获取所需的值,或者在这种情况下生成 QR 码。

当我按下按钮时,它会创建请求。 例如:

protected void buttonGenerateQrCode_Click(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        byte[] buf = new byte[8192];

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://localhost:44333/Backend2.aspx?generateqrcode=true&id=" + DropDownList1.SelectedItem.Text);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Stream resStream = response.GetResponseStream();
        int count;
        do
        {
            count = resStream.Read(buf, 0, buf.Length);
            if (count != 0)
            {
                string tempString = Encoding.ASCII.GetString(buf, 0, count);

                sb.Append(tempString);
            }
        }
        while (count > 0);
        Response.Write(sb.ToString());

        //createTextBox.Text = sb.ToString();

        resStream.Dispose();
        response.Dispose();
    }

在与数据库通信的后端接受此请求:

    protected void Page_Load(object sender, EventArgs e)
    {
        string generateQrCode = Request.QueryString["generateqrcode"];
        if (generateQrCode != null && generateQrCode == "true") GenerateQrCode();
    }

其中调用函数:

private void GenerateQrCode()
    {
        string id = Request.QueryString["id"];

        QRCodeGenerator qr = new QRCodeGenerator();
        QRCodeData data = qr.CreateQrCode(id, QRCodeGenerator.ECCLevel.Q);
        QRCode code = new QRCode(data);
        Bitmap QRbmp = code.GetGraphic(5);
        QRbmp.Save("pathtofile..\\QRcode.jpg");
    }

Javascript 似乎无法执行,因为表单上不存在__EVENTTARGET__EVENTARGUMENT元素。 在生成的 HTML 中,表单应包含以下隐藏元素:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

您应该尝试确认这些元素是否正在生成,如果没有,请尝试找出它们不存在的原因。 您可能需要使用<asp:Form>标记而不是<form runat="server">但这实际上只是我目前的猜测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM