代码之家  ›  专栏  ›  技术社区  ›  Lukasz Lysik

从ASP.NET获取动态创建的标记(jquery)

  •  1
  • Lukasz Lysik  · 技术社区  · 15 年前

    我在ASP.NET中有网页。我已经用jquery创建了树视图控件。我从树中拖动项目并将其放到DIV元素中。

    <div id="rows" runat="server" class="droppable">
    </div>
    

    我使用jquery中的.append函数向该DIV添加项。

    $(".droppable").append(event.originalTarget.innerHTML);
    

    它按我想要的方式工作。但现在我想从ASP.NET代码中获取所有已删除的项。我使用以下代码:

    protected void Button2_Click(object sender, EventArgs e)
    {
        HtmlGenericControl control = (HtmlGenericControl)Page.FindControl("rows");
        Label1.Text = control.InnerHtml;
    }
    

    但它不起作用。我也尝试过InnerText函数,但仍然没有。我还将按钮和标签控件放入了updatepanel中,这样页面就不会刷新,我删除的项仍然在div元素中。

    如何从ASP.NET代码获取动态添加的项。

    卢卡斯

    3 回复  |  直到 15 年前
        1
  •  6
  •   Crescent Fresh nosklo    15 年前

    你的 append() 调用只会更改DOM结构。ASP.NET不知道您这样做了。

    您需要将您的更改存储到页面上的隐藏“状态”字段中,并在您的代码中删除它们。

    var droppedItem = event.originalTarget;
    $(".droppable").append(droppedItem.innerHTML);
    $("#myHiddenStateField").get(0).value += "," + droppedItem.id;
    

    代码落后:

    string[] droppedItemIds = myHiddenStateField.Value.Split(",");
    
        2
  •  1
  •   ChaosPandion    15 年前

    ASP.NET只能与表单元素一起使用。

    因此,如果这些行是例如(input[type=text]),您可以这样做:

    Request.Form["rows"]
    

    编辑

    当用户拖动元素时,为什么不创建一个新的隐藏输入,并将相关值放入其中呢?这将使使用上面使用的示例很容易从服务器获取值。

        3
  •  1
  •   andryuha    15 年前

    更好的方法是,为什么不在Droppable的成功事件上使用jquery的ajax,并通过asp.net的pagemethod记录每一个droppable,那么就不必在Droppable元素中解析HTML了。

    这应该能让你开始

    http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

    下面是我使用的一个实际示例

              $('.droppable').droppable({
                accept: '#dragList > li, .columnRight li',
                activeClass: 'ui-state-highlight',
                hoverClass: 'hoverBorder',
                drop: function(ev, ui) {
                    $.ajax({
                        type: "POST",
                        url: "yourPage.aspx/AddDroppable",
                        data: "{'id':'" + ui.draggable.context.id + "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(msg) {
                            $("#Result").html(msg.d);
                        }
                    });
                }
            });