我正在使用ASP.NET(Visual C#)在SharePoint可视化Web部件中创建自定义视图,并具有CheckBoxList和按钮。
MarkUp for the List&按钮:
<td>
<asp:checkboxlist ID="cblYearLst" runat="server" EnableViewState="true" />
</td>
<td>
<asp:Button ID="btnRefineSearch" Text="Refine Search" runat="server" />
</td>
我将项目添加到PreRender上的CheckBoxList:
if (!IsPostBack)
{
if (LstYears != null)
{
for (int i = 0; i < LstYears.Count(); i++)
{
cblYearLst.Items.Add(new ListItem(LstYears[i], LstYears[i]));
}
}
}
我在事件处理程序上调用Page_Load上的按钮:
btnRefineSearch.Click += new EventHandler(this.btnRefineSearch_Click);
单击按钮后,所有CheckBox列表项都不会保持选中状态。我可以检索选定的值,但它们不会显示为已选中。当我在预渲染事件中为按钮添加Click事件处理程序时,数据会正确显示,但我的Click事件无法再检索所选值。
关于可能导致此行为的任何想法?
答案 0 :(得分:1)
您是否尝试将checkboxlist的绑定移动到page_load而不是pre_render?只是一个想法,因为看起来页面在回发时丢失了选项,并且每次都重新生成选项。
更新:我创建了一个快速页面,这可以正常工作。您是否在页面指令中的整个页面或者可能在web.config中关闭了viewstate?我看到你在复选框列表中启用了它,但也许有一个全局设置会让你失望。
protected void Page_Load(object sender, EventArgs e)
{
btnRefineSearch.Click += new EventHandler(this.btnRefineSearch_Click);
List<string> LstYears = new List<string>();
LstYears.Add("one");
LstYears.Add("two");
LstYears.Add("three");
LstYears.Add("four");
if (!IsPostBack)
{
if (LstYears != null)
{
for (int i = 0; i < LstYears.Count; i++)
{
cblYearLst.Items.Add(new ListItem(LstYears[i], LstYears[i]));
}
}
}
}
private void btnRefineSearch_Click(object sender, EventArgs args)
{
Response.Write(cblYearLst.SelectedValue);
}
答案 1 :(得分:0)
我想出了这个问题,因为我将AutoEventWireUp设置为true,因为Keenan已经建议如果我在page_load中执行它会全部工作。
问题是Page_Load被调用了两次,我发现这是因为我使用QueryString参数将用户重定向到相同的URL。在我做了急需的更改之后,我的代码运行得非常好。
+1
Keenan
感谢您的帮助,感谢您(@jfmags
)告诉我您认为这是其他事情。
:d