【问题标题】:Read <li> attributes in code behind在后面的代码中读取 <li> 属性
【发布时间】:2013-06-04 07:59:47
【问题描述】:

我有一个列表,例如:

<ul id="list">
   <li id="content_rptGalleryImages_galleryListItem_0" data-imageid="7" data-displayorder="0"></li>
   <li id="content_rptGalleryImages_galleryListItem_1" data-imageid="5" data-displayorder="1"></li>
   <li id="content_rptGalleryImages_galleryListItem_2" data-imageid="4" data-displayorder="2"></li>
</ul>

我希望能够访问每个列表项 data-imageiddata-displayorder 属性并将它们添加到我后面代码中的字典中,例如:-

Dictionary<int, int> dict = new Dictionary<int, int>();
foreach(var li in list.Controls)
{
    //find li
    dict.Add(li.Attribute["data-imageid"], li.Attribute["data-displayorder"]);
}

我想要实现的目标可能吗?如果没有,您能否提出一种替代方法?

根据要求编辑*中继器代码:

protected void rptGalleryImages_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
    {
        BrandImage image = (BrandImage)e.Item.DataItem;
        HyperLink lnkGalleryImage = (HyperLink)e.Item.FindControl("lnkGalleryImage");
        HyperLink lnkImageUrl = (HyperLink)e.Item.FindControl("lnkImageUrl");
        LinkButton lnkBtnRemoveImg = (LinkButton)e.Item.FindControl("lnkBtnRemoveImg");
        HtmlGenericControl galleryListItem = (HtmlGenericControl)e.Item.FindControl("galleryListItem");

        lnkGalleryImage.Text = image.ImageLocation.Substring(image.ImageLocation.LastIndexOf("/")).Replace("/", "");
        lnkGalleryImage.NavigateUrl = image.ImageLocation;

        lnkImageUrl.Text = image.ImageUrl;
        lnkImageUrl.NavigateUrl = image.ImageUrl;

        lnkBtnRemoveImg.CommandArgument = image.ImageLocation;

        galleryListItem.Attributes.Add("data-imageid", image.Id.ToString());
        galleryListItem.Attributes.Add("data-displayorder", image.DisplayOrder.ToString());
        }
    }

谢谢

【问题讨论】:

  • thie Dictionary&lt;int, int&gt; dict = new Dictionary&lt;int, int&gt;(); 是有效的 javascript 吗?在我看来像 java。
  • 您的 LI 列表是否由您的渲染动态添加?还是它们是在客户端动态添加的?
  • @wagregg li 是通过转发器添加的,我在客户端用一些 jquery 重新排序这些 li
  • @DGibbs 那么这里的 jQuery 代码在哪里?
  • 不确定您想要实现什么,但也许您可以在绑定转发器时构建您的字典并将字典存储在页面视图状态中(参见stackoverflow.com/q/6297073/1236044

标签: c# jquery asp.net


【解决方案1】:

浏览器不会在 post 请求中发送 li 元素属性,因为它不被视为表单 post 变量。这使得用户保存时无法在服务器上检索属性值。

一个使它工作的选项:

  • 使用相应的订单值填充每个项目的隐藏字段,并在用户重新订购时使用 javascript 更改此值。
  • 当他保存时,您从每个项目的隐藏字段中获取值并保存在数据库中。

【讨论】:

  • 我认为这可能有效,请 +1。不确定如何在我的文档中找到隐藏字段元素,因为它会生成服务器 ID?我可以使用 clientid 什么的吗?
  • 是的,它将同时具有服务器 ID 和客户端 ID。要在客户端获取它,您可以使用 ClientID HiddenField 服务器属性。或者甚至尝试在这种情况下为 HiddenField 使用不同的 ClientMode。
猜你喜欢
  • 2014-06-20
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多