如何获取从服务器端生成的html代码修改客户端?

时间:2013-05-23 19:27:13

标签: c# html asp.net .net htmlgenericcontrol

我创建了一个带有jquery sortable + C#的列表,用户(客户端)可以订购:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    HtmlGenericControl ul = new HtmlGenericControl("ul");
    ul.ID = "ID";
    ul.ClientIdMode = Static;
    HtmlGenericControl li_1 = new HtmlGenericControl("li");
    li_1.ID = "segment";
    li_1.InnerText = "server 1";
    li_1.ClientIdMode = Static;
    HtmlGenericControl li_2 = new HtmlGenericControl("li");
    li_2.ID = "page";
    li_2.InnerText = "server 1";
    li_2.ClientIdMode = Static;
    ul.Controls.Add(li_1);
    ul.Controls.Add(li_2);
    static.Controls.Add(ul);
}

服务器生成:

<div id="static" runat="server">
<ul id="ID">
    <li id="segment">server 1</li>
    <li id="page">server 2</li>
</ul>
</div>

客户端生成(修改):

<div id="static" runat="server">
<ul id="ID">
    <li id="page">client 1</li>
    <li id="segment">client 2</li>
</ul>
</div>

事件保存:

protected void btnSave_Click(object sender, EventArgs e)
{
    HtmlGenericControl ul = Libreria.Global.FindControlRecursivo(this, "ID") as HtmlGenericControl;
    foreach(HtmlGenericControl li in ul.Controls.OfType<HtmlGenericControl>())
    {
        // Always get html generated by server, first "segment" element and after "page" element
    }
}

如果每次我在每次回发时都生成动态代码,我总会得到服务器生成的代码,如果有效,则列表为空回发。 =(

如何获取从服务器端生成的html代码修改客户端?

更新 其他选项是使用 WebMethods 用javascript发送html:

document.getElementById("ID").innerHTML;

我无法处理元素是一个简单的字符串

HtmlGenericControl ul = new HtmlGenericControl();
ul.InnerHtml = stringHtml;
foreach(HtmlGenericControl li in ul.Controls.OfType<HtmlGenericControl>())
{
    // any element
}

2 个答案:

答案 0 :(得分:0)

更多阅读。什么是服务器控制。 asp.net在viewstate中管理他们的控件,在你的场景中你使用jquery在客户端创建控件,并将它的内部Html作为字符串发送到服务器端..在服务器端被视为字符串为真。

你可以做一件事来保持这个。只需使用ajax并将项添加到服务器端的“静态”div,它将在客户端呈现。部分邮寄的原因不需要时间。看起来你正在创建客户端。

答案 1 :(得分:0)

我用javascript中的对象解决了问题,用户更改了元素(li)并单击保存元素的最终顺序并发送调用一个使用此数组类型对象的web方法