gpt4 book ai didi

c# - 获取下拉列表值时避免回发 c# asp

转载 作者:行者123 更新时间:2023-11-30 16:42:15 25 4
gpt4 key购买 nike

我动态创建了一个 dropdownlist在 C# 中(在 asp 中没有代码):

DropDownList myDDL = new DropDownList();

这不能从 pageLoad() 调用因为它不会在每次页面刷新时加载。然而它每次加载另一个dll的OnPostback(OnSelectedIndexChanged())所以我不能做!IsPostBack .


此 dll 在以下时间创建:

  • 另一个值dropdownlist填充 GridView使用 OnSelectedIndexChanged()

    <asp:DropDownList id ="select1" name="assignGetForm"  runat="server" class="selectClass" AutoPostBack="True" OnSelectedIndexChanged="populateGridView">
  • 关于 GridView一个函数正在运行OnRowDatabound() (当上面的 OnIndexChanged() 填充它时)在 GridView 中填充 myDDL

    <asp:GridView id="GridView1" name="GridView1" onrowdatabound="populateCellsDDL" runat="server"></asp:GridView>

我现在正在尝试访问 myDDL 中的值使用按钮 onclick()事件 - 但是这总是会回发并刷新页面所以 myDDL消失了,当我打印控制台的值时,它只给出了我的第一个值 select activity而不是我实际选择的那个。

当这些值发生变化时我将如何获得这些值,因为此 dll 未填充在 pageLoad() 上.我试过查看 AJAX,但是我不确定如何通过它查看 c# 值。我也试过了viewstates但我没有运气,因为它没有出现在 pageLoad() 上.

最佳答案

我认为,如果您想访问动态创建的控件的值,则需要在每次回传中重新绑定(bind)网格。

我尝试用下面的示例代码模拟这种情况,我能够成功访问该值。

ASPX代码

<asp:DropDownList ID="select1" name="assignGetForm" runat="server" class="selectClass" AutoPostBack="True" />
<asp:GridView ID="GridView1" name="GridView1" OnRowDataBound="GridView1_DataBound" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

C#代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
FillMainDll();

if (!IsPostBack || GridView1.Rows.Count > 0)
BindGrid();
}

private void FillMainDll()
{
select1.DataSource = new int[] { 1, 2, 3 };
select1.DataBind();
}

private void BindGrid()
{
var dt = new DataTable();

dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));

for (int i = 1; i < 5; i++)
{
DataRow dr = dt.NewRow();

dr[0] = i;
dr[1] = "Name - " + i.ToString();

dt.Rows.Add(dr);
}

GridView1.DataSource = dt;
GridView1.DataBind();
}

protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var myDDL = new DropDownList();
myDDL.ID = "myDDL";
myDDL.DataSource = GetGridRowDdlData();
myDDL.DataBind();
e.Row.Cells[1].Controls.Add(myDDL);
}
}

private IEnumerable<string> GetGridRowDdlData()
{
var data = new List<string>();

for (int i = 1; i < 4; i++)
{
data.Add("Name - " + i * int.Parse(select1.SelectedValue));
}

return data;
}

protected void Button1_Click(object sender, EventArgs e)
{
var sb = new System.Text.StringBuilder();

foreach (GridViewRow row in GridView1.Rows)
{
var myDDL = row.FindControl("myDDL") as DropDownList;
if (myDDL != null)
{
sb.AppendFormat("{0}<br/>", myDDL.SelectedValue);
}
}

Response.Write(sb.ToString());
}

关于c# - 获取下拉列表值时避免回发 c# asp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47154630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com