【发布时间】:2017-09-09 10:45:12
【问题描述】:
我有这个控件来获取一些数据:
<asp:DropDownList ID="newsOrEvent" runat="server" Text='<%# Eval("newsEvent") %>'></asp:DropDownList>
然后在我的 Page_Load 我有:
protected void Page_Load(object sender, EventArgs e)
{
newsOrEvent.Items.clear();
newsOrEvent.Items.Add("News");
newsOrEvent.Items.Add("Event");
if (!this.IsPostBack)
{
if(newsID != 0)
{
this.BindRepeater();
// this.BindImageRepeater();
}
}
}
我的编译器说:名称 'newsOrEvent' 在当前上下文中不存在
private void BindRepeater()
{
using (SqlConnection con = new SqlConnection(constr))
{
string myQuery = string.Format("SELECT * FROM tblNewsEvents WHERE newsID = {0}", newsID);
using (SqlCommand cmd = new SqlCommand(myQuery, con))
{
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
sda.Fill(dt);
news.DataSource = dt;
news.DataBind();
}
}
}
}
这篇SO文章here建议:
- 我应该先
.clear这些项目 - 单独输入
<%# Eval("newsEvent") %>以查看它是否加载到页面中,它会加载。
它还说:
如果下拉控件的Text属性在分配数据源之前被分配了任何值,就会出现这个错误。
如何在读取 Eval 之前先添加项目?
我不明白为什么没有填充 DropDownList。
【问题讨论】:
-
显示页面加载方式。也可能只是清理和重建,甚至重新启动,特别是如果您添加另一个服务器控件并且无法从后面的代码访问该控件。
-
@Crowcoder 已发布 - 如,重新开始?
-
不要重启你的机器来清除 IIS Express。
-
@Crowcoder 我已经做到了,但没有改变:(
-
如果您添加其他控件,您可以从后面的代码中引用它们吗?