我创建了一个带有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
}
答案 0 :(得分:0)
更多阅读。什么是服务器控制。 asp.net在viewstate中管理他们的控件,在你的场景中你使用jquery在客户端创建控件,并将它的内部Html作为字符串发送到服务器端..在服务器端被视为字符串为真。
你可以做一件事来保持这个。只需使用ajax并将项添加到服务器端的“静态”div,它将在客户端呈现。部分邮寄的原因不需要时间。看起来你正在创建客户端。
答案 1 :(得分:0)
我用javascript中的对象解决了问题,用户更改了元素(li)并单击保存元素的最终顺序并发送调用一个使用此数组类型对象的web方法