Sam*_*ami 3 c# asp.net entity-framework .net-4.0 drop-down-menu
我有一个DropDownList与DataSourceaspx页面中的a相关联的.我需要在页面加载时再添加一个项目.
我的代码:
<asp:LabelDropDownList ID="ddlVisualTemplate" runat="server" LabelText="Visual Template:" DataSourceID="VisualTemplateDataSource" DataTextField="Name" DataValueField="Id" AutoPostBack="true" OnSelectedIndexChanged="ddlVisualTemplate_SelectedIndexChanged"/>
<asp:EntityDataSource ID="VisualTemplateDataSource" runat="server"
ConnectionString="name=Entities"
DefaultContainerName="Entities" EnableFlattening="False"
EntitySetName="tbEmailVisualTemplates">
Run Code Online (Sandbox Code Playgroud)
而我正在尝试额外的项目:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我调试代码,它会通过它.但是当显示页面时,下拉列表不包含"None".
Yah*_*ous 12
原始海报可能为时已晚,但对其他用户可能有用:
您可以在设计器(或代码中)中添加值"无","选择值"等,并DataBind通过设置防止覆盖它AppendDataBoundItems="true".这将使DataBind追加而不是明确.
有关示例,请参阅Scott Guthrie 在ASP.NET 2.0中发布的ListControl.AppendDataBoundItems属性.
ub1*_*b1k 10
这很可能是因为你在之前添加了这个项目DataBind().如果要添加项目
ddlVisualTemplate.Items.Add()
Run Code Online (Sandbox Code Playgroud)
然后你必须在下拉列表被绑定后这样做.
如果您查看http://msdn.microsoft.com/en-us/library/ms178472.aspx,则DataBind将在PreRenderComplete中完成.因此,您必须在PreRenderComplete之后发生的某些事件中添加元素.或者你可以在ddlVisualTemplate.DataBound活动上做到这一点.
您可以通过以编程方式设置数据源来轻松解决此问题:
ddlVisualTemplate.DataSource = VisualTemplateDataSource;
ddlVisualTemplate.DataBind();
ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在我看来,这些数据源控件在asp.net中是错误的.我不喜欢定义数据源并控制到aspx页面的数据库连接的想法.有关更好的方法,只需google关于每个请求模式的会话,关注点分离和n层应用程序.
更新:您可以直接调用数据而不是"VisualTemplateDataSource".我不知道EF,但它可能是这样的:"DataContext.tbEmailVisualTemplates".您必须设置datacontext.然后你可以摆脱数据源控制.
| 归档时间: |
|
| 查看次数: |
31538 次 |
| 最近记录: |