HTML选择标记内的Repeater

时间:2015-09-28 14:07:58

标签: c# html asp.net webforms repeater

我被迫使用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>

2 个答案:

答案 0 :(得分:0)

解决问题的正确方法是:

  1. runat="server"应用于选择。
  2. 删除转发器
  3. 您不需要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