как использовать ul и li в коде за C #

0

Я пытаюсь заполнить li и ul файла HTML, используя мою базу данных. одна категория, представляющая несколько элементов в базе данных.

Я взял элементы li в строке, я заменяю [food] именем CATEGORY и [itemTemplate] с помощью ITEMS. Проблема в моем коде - это имя категории повторяется. Каждый раз, когда отображается новый элемент. Я должен показать название категории один раз и добавить все связанные элементы в этой категории.

String liTemplate = "<li><h4 class='menu-title-section'> <h4 class='menu-title-section'><a href='#appetizers'>[food]</a></h4>[itemTemplate]</li>";
String itemTemplate = "SOME ITEM TEMPLETE";

DataTable dt = dm.GetData("spTestMenu")

StringBuilder sb = new StringBuilder();
sb.Append("<ul class='our-menu'>");
String liTemplateWorkingCopy = String.Empty, itemTemplateWorkingCopy = String.Empty

foreach (DataRow level1DataRow in dt.Rows)
{
    liTemplateWorkingCopy = liTemplate;
    itemTemplateWorkingCopy = itemTemplate;
    SubCategoryName = level1DataRow["MealSubCatName"].ToString();

    if (!previusSubCat.Equals(SubCategoryName))
    {
        liTemplateWorkingCopy = liTemplateWorkingCopy.Replace("[food]", level1DataRow["MealSubCatName"].ToString());
        previusSubCat = SubCategoryName;
    }

    itemTemplateWorkingCopy = itemTemplateWorkingCopy.Replace("[foodtitle]", level1DataRow["itemName"].ToString());
    itemTemplateWorkingCopy = itemTemplateWorkingCopy.Replace("[imgsrc]", level1DataRow["imageURL"].ToString());
    itemTemplateWorkingCopy = itemTemplateWorkingCopy.Replace("[price]", level1DataRow["Price"].ToString());

    liTemplateWorkingCopy = liTemplateWorkingCopy.Replace("[itemTemplate]", itemTemplateWorkingCopy);
    sb.Append(liTemplateWorkingCopy);
    foodMenu.Text = sb.ToString();
}
  • 0
    Остерегайтесь - похоже, он может пострадать от внедрения скрипта; если вы собираетесь собирать html вручную, убедитесь, что html-escape не содержит данных
  • 2
    было бы невозможно просто использовать управление повторителем, чтобы сделать это.
Показать ещё 2 комментария
Теги:

3 ответа

0

Я бы предложил использовать элемент управления ListView для этого. Таким образом, вы можете поддерживать HTML вне своего кода; он более чистый и более элегантный.

Группируйте свои строки столбцом "MealSubCatName" и используйте LINQ для создания анонимного объекта:

С#

var grouped = dt.AsEnumerable().GroupBy(c => c["MealSubCatName"].ToString())
    .Select(g => new
    {
        category = g.FirstOrDefault()["MealSubCatName"].ToString(),
        items = g.Select(r => new { 
            title = r["itemName"].ToString(), 
            image = r["imageURL"].ToString() 
        })
    });
lvFood.DataSource = grouped;
lvFood.DataBind();

ASPX

<asp:ListView ID="lvFood" runat="server">
    <LayoutTemplate>
        <ul>
            <asp:PlaceHolder runat="server" ID="groupPlaceholder" />
        </ul>
    </LayoutTemplate>
    <GroupTemplate>
        <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
    </GroupTemplate>
    <ItemTemplate>
        <li>
            <h4 class="menu-title-section">
                <a href="#appetizers"><%# Eval("category") %></a>
            </h4>
        </li>
        <asp:Repeater ID="rpt" runat="server" DataSource='<%# Eval("items") %>'>
            <ItemTemplate>
                <img src="<%# Eval("image")%>" alt="<%# Eval("title")%>" />
                <strong><%# Eval("title")%></strong><br />
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:ListView>
0

Вы можете установить runat="server" для <li> или <ul>.

<li class="abc" runat="server" id="first"></li>
-2

Добавьте div с сервером runat и назначьте Id этому div и сделайте что-нибудь подобное. Я сделал этот трюк здесь. Www.journeycook.com Проверьте меню этого веб-сайта.

Предположим, у вас есть div с id link и сервером runat в теге ul

<ul>
<div runat="server" id="link">

</div>

</ul>

Теперь добавьте код С# для извлечения данных с использованием класса SqlDataReader и используя while loop, сделайте что-то вроде этого

link.innerhtml+="<li>dr["yourcolumn"].ToString()</li>";

Надеюсь, это даст вам некоторую помощь

  • 0
    это приводит к неверному HTML; div не должен быть ребенком ul
  • 0
    хорошо, тогда что я должен использовать здесь? @ReinderWit
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню