我正在编写SharePoint App,并且下拉列表有问题。其SelectedIndex不变。我阅读了许多问题和答案,他们建议对IsPostBack
使用EnableViewState
或true
。我都没有成功。
ASP代码:
<div class="value">
<asp:DropDownList ID="groupingDropDownList" runat="server" EnableViewState="True" OnSelectedIndexChanged="groupingDropDownList_SelectedIndexChanged" AutoPostBack="true" />
</div>
C#代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
groupingDropDownList.DataSource = sourceList.Select(x => new { x.Name, Value = x });
groupingDropDownList.DataTextField = "Name";
groupingDropDownList.DataValueField = "Value";
groupingDropDownList.DataBind();
}
}
事件SelectedIndexChanged
未触发,因为索引未更改。我在行if (!Page.IsPostBack)
上设置了一个断点,它始终为0。
答案 0 :(得分:0)
在!Page.IsPostBack块中,您是第一次填充下拉列表。您似乎正在尝试检测正在加载的下拉选择中的更改-这是不可能的。
因此,要对其进行测试,您应该在页面的回发中或在groupingDropDownList_SelectedIndexChanged事件处理程序中进行检查。
if (!Page.IsPostBack)
{
groupingDropDownList.DataSource
= sourceList.Select(x => new { x.Name, Value = x });
groupingDropDownList.DataTextField = "Name";
groupingDropDownList.DataValueField = "Value";
groupingDropDownList.DataBind();
}
// Actual postback
else
{
var test = groupingDropDownList.SelectedValue;
}
答案 1 :(得分:0)
我知道我的错是那一行:
groupingDropDownList.DataSource = sourceList.Select(x => new { x.Name, Value = x });
我总是将值设置为与类名相同,并且由于该值没有变化,因此控件没有注意到索引的变化。