你会如何操纵服务器端的HTML列表?

时间:2009-12-15 15:19:52

标签: asp.net ajax jquery

如何在后面的代码(服务器端)中动态创建新的html li元素?

您如何访问服务器端现有li元素中的ul? 我需要FindControl获取所有li项,然后添加新的li项。

更新

我正在使用jquery ajax来访问服务器端,所以我必须使用静态WebMethod。 FindControl是非静态方法。

 <script type="text/javascript">
        $(function(){
        $("#sortable").sortable();
        $("#sortable").disableSelection();
    });

这是jQuery Ajax Call

$(document).ready(function() {
        // Add the page method call as an onclick handler for the div.
        $("#Result").click(function() {
            $.ajax({
                type: "POST",
                url: "DraggableTest.aspx/SomeMethod",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    // Replace the div's content with the page method's return.
                    $("#Result").text(msg.d);
                }
            });
        });
    });

这是CodeBehind

[WebMethod]
    public static string SomeMethod()
    {
        // using System.Web.UI.HtmlControls;
        HtmlGenericControl ul = FindControl("sortable") as HtmlGenericControl;
        if (ul != null)
        {
            foreach (HtmlControl c in ul.Controls)
            {
                if (c.TagName.ToLower() == "li")
                {
                    // Processing here
                }
            }
        }


    }

2 个答案:

答案 0 :(得分:4)

您可以使用HtmlGenericControl

添加Html列表项
System.Web.UI.HtmlControls.HtmlGenericControl li = new System.Web.UI.HtmlControls.HtmlGenericControl("li");
li.InnerHtml = "<b>Some text</b>";
Page.Controls.Add(li);

在上面的示例中,我刚刚将控件直接添加到页面的末尾 - 您显然需要考虑将其添加到的父元素。

<强>更新 要回答编辑后提出的问题的额外部分,如果您的ul控件的ID为ulListId且标有runat="server,则可以使用FindControl方法以编程方式找到它。然后循环遍历ul的孩子:

        // using System.Web.UI.HtmlControls;
        HtmlGenericControl ul = Page.FindControl("ulListId") as HtmlGenericControl;
        if (ul != null) {
            foreach (HtmlControl c in ul.Controls)
            {
                if (c.TagName.ToLower() == "li")
                {
                    // Processing here
                }
            }
        }

答案 1 :(得分:0)

您可以使用HtmlGenericControl创建服务器端li元素。另一种选择可能是使用LiteralControl。

编辑:如果你的&lt; ul&gt;是一个服务器控件(具有runat =“server”属性),您可以通过Page.FindControl(“yourControlID”)访问它。

// <ul runat="server" id="yourControlID"></ul>

HtmlGenericControl myUl = (HtmlGenericControl)Page.FindControl("yourControlID");
LiteralControl liByLiteral = new LiteralControl("<li>li by LiteralControl</li>");
myUl.Controls.Add(liByLiteral);
HtmlGenericControl newByHtmlGenericControl = new HtmlGenericControl("li");
newByHtmlGenericControl.InnerText = "li by HtmlGenericControl";
myUl.Controls.Add(newByHtmlGenericControl);
// You can access other <li> elements in <ul> control