![](/img/trans.png)
[英]DropDownList SelectedIndexChanged not firing (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.