我被迫使用select标签,所以请不要建议使用asp下拉列表。
我的问题是除非有 runat = server ,否则select标签不可见。如果我放了一个runat = server,我会收到一条错误,指出我在HTMLSelect中没有转发器。
非常欢迎任何建议,谢谢!
<select name="medicineName" class="grey-text initialized">
<option value="" disabled selected>Choose medicine</option>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<option value='<%# Eval("id")%>'>
<%# Eval("name") %> | <%# Eval("unit") %> | <%#Eval ("quantity") %>
</option>
</ItemTemplate>
</asp:Repeater>
</select>
答案 0 :(得分:0)
解决问题的正确方法是:
runat="server"
应用于选择。您不需要Repeater
,它所做的就是循环收集并以您构建的格式输出。从后面的代码中,您实际上可以应用DataSource
Repeater
,然后它会在您的选择中输出。你是如何实现这个目标的:
// Build Model:
public class Medicine
{
public int? Id { get; set; }
public string Name { get; set; }
}
你有自己的模特,现在你会Query<Medicine>(...)
。这将构建您的模型的Collection
。然后你会做以下事情:
// Dropdown:
drpMedicine.DataSource = Query<Medicine>(...);
drpMedicine.DataBind();
然后在您的前端,您将执行以下操作:
<select id="drpMedicine" runat="server" datatextfield="Name" datavaluefield="Id"></select>
这样您就可以绑定List
而无需手动创建循环。
请注意,Query是一种自定义方法,可以构建和格式化数据。您需要执行以下操作。
答案 1 :(得分:0)
为了实现DropDownList控件(而不是Repeater)的使用,请确保将数据库列连接为SQL语句中的一列。
例如:
SELECT id, name + ' | ' + unit + ' | ' + CONVERT(varchar, quantity) AS medicine
FROM medicines_table
我假设您的数量列使用整数数据类型,这就是我将其转换为字符串值的原因。
从您的代码隐藏中,您现在可以设置DataTextField and DataValueField properties的值:
// other code here
yourDropDownList.DataTextField = "medicine";
yourDropDownList.DateValueField = "id";
// other code here