1

ユーザー(クライアント)が注文できる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 コードを取得するにはどうすればよいですか?

更新: 他のオプションは 、html を送信する javascript でWebMethodsを使用しています:

document.getElementById("ID").innerHTML;

単純な文字列の要素を処理できません

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

2 に答える 2

0

詳しく読む。サーバー制御とは。asp.net は viewstate でコントロールを管理します。シナリオでは、jquery を使用してクライアント側でコントロールを作成し、その内部 Html を文字列としてサーバー側に送信します。サーバー側で文字列として扱われるのは true です。

これを維持するためにできることは 1 つあります。ajaxを使用して、サーバー側の「静的」divにアイテムを追加するだけで、クライアント側でレンダリングされます。部分的なポストバックの原因は時間がかかりません。クライアント側で作成しているように見えます。

于 2013-06-06T01:36:51.350 に答える