C# 已选择索引始终启用0回发,正在检查!回发不';我不想耍花招

C# 已选择索引始终启用0回发,正在检查!回发不';我不想耍花招,c#,asp.net,ajax,webforms,C#,Asp.net,Ajax,Webforms,我正在与DropDownList的SelectedIndex斗争。它似乎总是以0的形式返回。我正在填写一个基于linq查询结果的下拉列表。 从下拉列表中选择选项并点击Button1后,Button1返回SelectedIndex,该索引始终为0。 我已尝试在页面加载区域内添加if(!Page.IsPostback),这会将SelectedIndex更改为-1。。相关代码如下 <script runat="server"> int dropDownCounter = 0;

我正在与DropDownList的
SelectedIndex
斗争。它似乎总是以
0
的形式返回。我正在填写一个基于linq查询结果的下拉列表。 从下拉列表中选择选项并点击
Button1后,Button1
返回
SelectedIndex
,该索引始终为
0
。 我已尝试在页面加载区域内添加
if(!Page.IsPostback)
,这会将
SelectedIndex
更改为
-1
。。相关代码如下

<script runat="server">
    int dropDownCounter = 0;
    public string levelselected = null;

    void Level_Index_Changed(Object sender, EventArgs e) 
    {
        roledropdown.Controls.Clear();
        CheckBox chkList1;
        chkList1 = new CheckBox();
        chkList1.Text = (LevelOptions.SelectedIndex.ToString());
        chkList1.CssClass = "roleCheckBox";
        chkList1.ID = "xxxx";
        roledropdown.Controls.Add(chkList1);
        roledropdown.Controls.Add(new LiteralControl("<br>"));
        UpdatePanel.Update();
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        AsyncScriptManager.RegisterAsyncPostBackControl(LevelOptions);
        AsyncScriptManager.RegisterAsyncPostBackControl(Button1);

        var levels = new List <SelectListItem>();

        foreach(var x in userRoleQuery)
        {
        //Add the levels to a dropdown menue
        ListItem gg = new ListItem();
        gg.Text = "Hello";
        gg.Value = (dropDownCounter.ToString());
        if (dropDownCounter == 0) 
        {
            gg.Selected = true;
            levelselected = (x.LevelId.ToString());
        }
        LevelOptions.Items.Add(gg);
    }
    dropDownCounter++;
}
</script>

<asp:DropDownList ID="LevelOptions" runat="server" AutoPostBack="True" OnSelectedIndexChanged="Level_Index_Changed">
</asp:DropDownList>
<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <asp:Panel ID="roledropdown" runat="server">
    </asp:Panel>
  </ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
  </Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Update Both Panels" OnClick="Level_Index_Changed" />

int-dropDownCounter=0;
公共字符串levelselected=null;
无效级别索引已更改(对象发送方、事件参数e)
{
roledropdown.Controls.Clear();
复选框chkList1;
chkList1=新复选框();
chkList1.Text=(LevelOptions.SelectedIndex.ToString());
chkList1.CssClass=“roleCheckBox”;
chkList1.ID=“xxxx”;
roledropdown.Controls.Add(chkList1);
添加(新的LiteralControl(“
”); UpdatePanel.Update(); } 受保护的无效页面加载(对象发送方、事件参数e) { AsyncScriptManager.RegisterAsyncPostBackControl(LevelOptions); AsyncScriptManager.RegisterAsyncPostBackControl(按钮1); 变量级别=新列表(); foreach(userrolequiry中的变量x) { //将级别添加到下拉菜单 ListItem gg=新ListItem(); gg.Text=“你好”; Value=(dropDownCounter.ToString()); 如果(下拉计数器==0) { gg.Selected=true; levelselected=(x.LevelId.ToString()); } LevelOptions.Items.Add(gg); } 下拉计数器++; }
为什么
按钮1
调用与从下拉列表中选择项目相同的函数?这似乎有点奇怪。我在一开始启动事件时遇到了一些困难,因此我添加了一个按钮,以在更改后对其进行测试。当您从按钮调用相同的函数时,按钮的选定索引为0,这并不是因为按钮没有选定的索引,但实际上是相同的。更改下拉列表中的选择时,您的结果是什么?