我有这个控件来获取一些数据:
<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();
}
}
}
我的编译器说:名称&#39; newsOrEvent&#39;在当前上下文中不存在
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
没有填充。
答案 0 :(得分:0)
正如我在评论中提到的asp:DropDownList
,控件没有Text
属性。让你的下拉列表填充的最简单方法是填写声明性地。这样的事情。
<asp:DropDownList ID="ddNewsOrEvents" runat="server" DataTextField="NewsTitle"
DataValueField="newsID"
AppendDataBoundItems="true" DataSourceID="sqlNews">
<asp:ListItem Value="-1" Text="News"></asp:ListItem>
<asp:ListItem Value="0" Text="Event"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="sqlNews" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionFromWebConfig %>"
SelectCommand="select newsID, newsTitle from dbo.tblNewsEvents where newsId=@newsID">
<SelectParameters>
<%--if newsID comes from some control --%>
<asp:ControlParameter ControlID="someControl" PropertyName="someProperty" Name="newsID" Type="Int32" />
<%--if newsId comes from querystring --%>
<asp:QueryStringParameter QueryStringField="newsid" Name="newsID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
不需要代码。只需遵循KISS原则( K eep 我 t S 实施 S tupid)
跟进
控件 SelectedValue
后,才能设置Text
(DropdownList
)DataBound
控件的SelectedValue='<%#Eval("dataField")%>'
属性。这意味着只有DropDownList
位于绑定容器中且DataSourceID
本身具有.SelectedValue
时才能设置DataBound
。否则,您必须在createUser(user: User){
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, user, options).map((response: Response) =>
response.json());}
事件后设置/a/*
。